我正在编写几个Solr自定义查询组件。 每个组件运行不同类型的查询:
每个组件都会将文件从其结果发送到下一个组件。
在我的“过程”功能中,在通过分组设置结果后,我将以下内容:
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获取文档的“分数”?
答案 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`