rrsk
rrsk

Reputation: 124

Explain scoring in lucene while sorting involved

I am getting null value in topDocs.scoreDocs for some documents while searching in lucene index. Please explain me about value in [ ] in topDocs.scoreDocs

SortField sortFieldObj = new SortField(sortField, SortField.STRING, sortOrder);
Sort sort = new Sort(sortFieldObj);
TopDocs topDocs = searcher.search(query, null, sizeNeeded, sort);
Document docNew = searcher.doc(topDocs.scoreDocs[i].doc);
System.out.println(topDocs.scoreDocs[i]);

    

output:

doc=2 score=NaN[null]

doc=44 score=NaN[testString]

Upvotes: 1

Views: 2723

Answers (1)

Arun
Arun

Reputation: 1787

Well, the reson is indirectly you told Lucene to ignore its document scores and use your own sort order. Scoring is used to bring topdocs, but you chose to bring docs in the sort order you specified, hence NAN.

If you want to force Lucene to give you scores when you specified your own sort order use another overloaded method for search :

search(Query query, Filter filter, int n,
                             Sort sort, boolean doDocScores, boolean doMaxScore)

If doDocScores is true then the score of each hit will becomputed and returned. If doMaxScore true then the maximum score over all collected hits will be computed.

So you would do something like : searcher.search(query, null, sizeNeeded, sort,true,true);

Upvotes: 7

Related Questions