0

SolrでlengthNormを無効にしたいのですが。一部の人々は、omitNorms=trueを使用することを提案しています。でもインデックスタイムブーストもやりたいので使えません。「omitNorms=true」は、インデックス時間のブーストを無効にしているようです。私がオンラインで見つけたもう1つのアプローチは、DefaultSimilartyのlengthNormメソッドをオーバーライドすることです。しかし、このメソッドはSolr4.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 に答える