I have a question about moving a trivial (?) Similarity class from version
4.x to 6.x
I have queries along these lines: field1:somevalue^0.55
field2:anothervalue^1.4
The score for a document is simply the sum of weights. A hit on field1
alone scores 0.55. Field2 alone scores 1.4. Both fields scores 1.95
The codebase I am dealing with is based on 4.x, and has a similarity class
like this:
----------------------------------------------
public class MySimilarity extends Similarity {
public long computeNorm(FieldInvertState state) {
return 1;
}
public SimWeight computeWeight(float queryBoost, CollectionStatistics
collectionStats, TermStatistics... termStats) {
return new MySimWeight(queryBoost);
}
public SimScorer simScorer(SimWeight weight, AtomicReaderContext
context) throws IOException {
return new MySimScorer((MySimWeight)weight);
}
public static class MySimScorer extends Similarity.SimScorer {
public MySimWeight weight;
...
public float score(int doc, float freq) {
return freq > 0.0 ? weight.boost : 0.0f; // don't count >1
occurrence
}
public float computeSlopFactor(int distance) {
return 1.0f / (distance + 1);
}
public float computePayloadFactor(int doc, int start, int end,
BytesRef payload) {
return 1.0f;
}
}
public static class MySimWeight extends SimWeight {
public float topLevelBoost;
public float queryBoost;
public float boost;
public MySimWeight(float queryBoost) {
this.queryBoost = queryBoost;
}
public float getValueForNormalization() {
return 1.0f;
}
public void normalize(float queryNorm, float topLevelBoost) {
this.topLevelBoost = topLevelBoost;
this.boost = this.queryBoost * topLevelBoost;
}
}
}
----------------------------------------------
How would I adapt this for Solr 6.x where the boosting factor no longer
appears in the Similarity methods?