2
votes

I am trying to boost certain documents. But they dont get boosted. Please tell me what I am missing. Thanks!

In my index code I have:

if (myCondition)  
{
   myDocument.SetBoost(1.1f);
}
myIndexWriter.AddDocument(document);

then in my search code I retrieve the collection of documents from the ScoreDocs object into myDocuments collection and:

    foreach (Lucene.Net.Documents.Document doc in myDocuments)
    {
        float tempboost = doc.GetBoost();
    }

and I place a breakpoint in the foreach clause to break if the tempboost is not 1. and the breakpoint is never hit.

What did I miss?

Many thanks!

2

2 Answers

4
votes

From javadoc of Lucene (Java version but same behaviors apply):

public float getBoost()

Returns, at indexing time, the boost factor as set by setBoost(float).

Note that once a document is indexed this value is no longer available from the index. At search time, for retrieved documents, this method always returns 1. This however does not mean that the boost value set at indexing time was ignored - it was just combined with other indexing time factors and stored elsewhere, for better indexing and search performance.

note: for those of you who get NaN when retrieving the score please use the following line

searcher.SetDefaultFieldSortScoring(true,true);

0
votes

use the following line to solve the NAN score

searcher.SetDefaultFieldSortScoring(true,true);