0

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

1 回答 1

1

您可以检查4.0的DefaultSimilarity的来源

@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 的自定义类,或者删除计算((float) (1.0 / Math.sqrt(numTerms)))以消除 lengthNorm 效应。

于 2012-12-19T04:12:24.893 回答