我想在Solr中禁用lengthNorm。有些人建议使用omitNorms = true。但我不能使用它,因为我也想做索引时间提升。 “omitNorms = true”似乎禁用索引时间提升。 我在网上找到的另一种方法是在DefaultSimilarty中覆盖lengthNorm方法。但看起来这个方法不再用于Solr 4.0。还有其他方法吗?
public float lengthNorm(String fieldName, int numTerms) {
return numTerms > 0 ? 1.0f : 0.0f;
}
答案 0 :(得分:1)
您可以查看DefaultSimilarity for 4.0
的来源@Override
public void computeNorm(FieldInvertState state, Norm norm) {
final int numTerms;
if (discountOverlaps)
numTerms = state.getLength() - state.getNumOverlap();
else
numTerms = state.getLength();
norm.setByte(encodeNormValue(state.getBoost() * ((float) (1.0 / Math.sqrt(numTerms)))));
}
您可以创建一个numTerms等于1的Custom类,或删除计算((float) (1.0 / Math.sqrt(numTerms)))
以消除lengthNorm效果。