禁用lengthNorm(长度规范化)

时间:2012-12-18 20:14:36

标签: solr

我想在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;
}

1 个答案:

答案 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效果。