1

私の目的は、与えられた都市(用語)で動物(ドキュメント)を見つけることです

私はこの方法で文書を索引付けしました:

doc1(bear)  = [city1, city2, city2, city3..]
doc2(dog)   = [city1, city1, city1, city2, city2, city2, city3, city3, city3..]
..

多くの都市に出現する (動物) ドキュメント、つまり「犬」のような異なる都市/すべての都市の割合が高いドキュメントにペナルティを課したいと思います。

助言がありますか?ありがとう

4

1 に答える 1

2

それはすでにあります!

Similarity.computeNormを参照してください。

デフォルトでは、norm 関数は短いフィールドでの一致をより正確な一致と見なし、長いフィールドよりも高いスコアを付けます。

これがより大きな影響を与える必要がある場合は、DefaultSimilarity をカスタム バージョンでオーバーライドし、computeNorm メソッドから返される値を変更して、計算の lengthNorm 部分をより重視することができます。必要に応じて、既存のアルゴリズムのどこかに乗数を追加することをお勧めしますが、必要に応じて微調整してください。

ノート!API で説明されているように、この値はインデックスに格納され、クエリ時に計算されません。変更を有効にするには、インデックスを再作成する必要があります。


computeNorm (3.6.0) での計算は次のとおりです。

state.getBoost() * ((float) (1.0 / Math.sqrt(numTerms)))

ここで、numterms はフィールド内の用語の総数であり、state はFieldInvertStateです。

于 2012-12-12T17:56:32.140 に答える