Reputation: 24667
I am trying to boost particular documents based on a field value. It is generally working ok but some documents return a higher score even though they have a smaller boost value.
After debugging the query with the debugQuery=on
request parameter I have noticed that the idf
function is returning a higher score for a particular document, which is affecting the overall score.
Is there a way to ignore tf/idf scoring at query time?
Upvotes: 6
Views: 5547
Reputation: 33351
You'll want to create a custom Similarity which overrides the tf and idf methods, and use it in place of the DefaultSimilarity.
Something like:
class CustomSimilarity extends DefaultSimilarity {
@Override
public float tf(float freq) {
return 1.0;
}
@Override
public float tf(int freq) {
return 1.0;
}
@Override
// Note the signature of this method may now take longs:
// public float idf(long docFreq, long numDocs)
public float idf(int docFreq, int numDocs) {
return 1.0;
}
}
The set it to use that similarity in your schema.xml:
<similarity class="myorg.mypackage.CustomSimilarity"/>
Upvotes: 9