自定义查询组件 - 如何从文档ID获取“得分”?

时间:2013-04-11 18:02:21

标签: solr lucene

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

  • 组件A:按查询字段A
  • 进行分组
  • 组件B:在另一个fild 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);

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

float score = dit.score()

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

2 个答案:

答案 0 :(得分:0)

您是否有特殊原因获得docSet而不是docList

我会尝试(缩小一点)获得s.docList.iterator()而不是s.docSet.iterator()。后者特别在documentation here中指出,你无法从中获得有意义的分数,docList表示它可能包含有效分数。

答案 1 :(得分:0)

你必须在getDocList中设置GET_Scores(查询,List,Lsort,offset,maxnoofdocs,1)

下面     `

 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`