0

我正在编写几个 Solr 自定义查询组件。每个组件运行不同类型的查询:

  • 组件 A:按查询字段 A 进行分组
  • 组件 B:在不同的字段 B 上进行分组

每个组件都会将它的文档从它的结果发送到下一个组件。

在我的“进程”函数中,在通过分组设置结果后,我将执行以下操作:

IndexSchema schema = searcher.getSchema();
DocListAndSet s = result.getDocListAndSet();
DocSet s3 = s.docSet;
DocIterator dit = s3.iterator()
while (dit.hasNext())
{
    SolrDocument doc = new SolrDocument();
    int docid = dit.nextDoc();
    //float score = dit.score();<--This does not get the score

    Document luceneDoc = searcher.doc(docid);//get the document using the doc id
    for( Fieldable field : luceneDoc.getFields())
    {
        SchemaField sf = schema.getField( field.name() );
        doc.addField( field.name(), sf.getType().toObject( field ) );
        ......

   }

然后遍历 Set 并创建 SolrDocument。

SolrDocumentes 被输入到 SolDocumentList 中,最后我将它发送到下一个组件:

rb.req.getContext().put("TAG", list);

我还想添加一个名为“score”的 SolrDocument 字段,该字段将包含实际分数。我尝试使用以下方法获得分数:

float score = dit.score()

但是上面没有得到文档的分数。如何使用文档 ID 获取文档的“分数”?

4

2 回答 2

0

你得到的docSet不是有什么特别的原因docList吗?

我会尝试(浓缩一点)得到s.docList.iterator()而不是s.docSet.iterator(). 后者在此处的文档中明确指出,您无法从中获得有意义的分数,其中docList可能包含有效分数的状态。

于 2013-04-11T21:53:55.873 回答
0

那么你必须在 getDocList(query,List,Lsort,offset,maxnoofdocs,1) 中设置 GET_Scores

这里`

 query is your query obj
 List<Query> your filters could be null
 lsort could be null
 offset 
 maxnoofdocs integer
 1 means get score with documents` 
于 2013-05-09T16:54:51.230 回答