4

ElasticSearchで、「CategoryMajor」という1つのフィールドを持つ2つのドキュメントを作成しました

doc1で、CategoryMajorを「Restaurants」に設定しました

doc2で、CategoryMajorを「レストランレストランレストランレストランレストラン」に設定しました

CategoryMajor:Restaurantsを検索すると、doc1はdoc2よりも関連性が高いと表示されます。これは典型的なLuceneの動作ではなく、用語が表示される回数が多いほど関連性が高くなります。doc2はdoc1よりも関連性が高いはずです。

どうすればこれを修正できますか?

4

1 に答える 1

4

GETクエリに&explain = trueを追加して、doc2のスコアが「fieldNorm」係数によって低下することを確認できます。これは、デフォルトのlucene類似度計算式が原因で、長いドキュメントのスコアが低くなります。デフォルトのルセン類似性式については、次のドキュメントをお読みください。

http://lucene.apache.org/core/3_6_0/api/all/org/apache/lucene/search/Similarity.html

この動作を無効にするには、PUTリクエストを次の宛先に送信して、CategoryMajorフィールドの「omit_norms=true」をインデックスマッピングに追加します。

http://localhost:9200/index/type/_mapping

リクエスト本文付き:

{
    "type": {
         properties": {
            "CategoryMajor": {
                "type": "string",
                "omit_norms": "true"
           }
        }
    }
}

確かではありませんが、インデックスを削除して再度作成し、マッピングの上に配置してから、ドキュメントのインデックスを再作成する必要がある場合があります。マッピングを変更した後のインデックスの再作成は確かに必要です:)。

于 2012-09-07T20:19:43.040 に答える