0

複数の基準を持つ検索があります。

各基準 ( でグループ化should) には、異なる加重スコアがあります。

ElasticSearch は結果のリストを返します。それぞれにスコアがあります-これは私には任意のスコアのようです。これは、そのスコアの分母が見つからないためです。

私の質問は、各スコアをどのように比率として表すことができるかということです。

各スコアを で割るmax_scoreと、検索条件に 100% 一致するベスト マッチが表示されるため、うまくいきません。

4

1 に答える 1

1

計算は、使用_scoreするクエリの組み合わせによって異なります。たとえば、次のような単純なクエリです。

{ "match": { "title": "search" }}

以下を組み合わせて、Lucene のTFIDFSimilarityを使用します。

  • 用語頻度 (TF):この文書のフィールドにその用語が何回search出現するか? title回数が多いほど高得点

  • 逆ドキュメント頻度 (IDF): 用語がインデックス内のすべてのドキュメントのフィールドに何回search出現するか? title頻度が高いほどスコアが低くなる

  • フィールド ノルム: フィールドの長さはtitle? フィールドが長いほど、スコアは低くなります。( のような短いフィールドは、 のようtitleな長いフィールドよりも重要であると見なされますbody。)

  • クエリの正規化係数。(無視してよい)

一方、次のboolようなクエリ:

"bool": {
    "should": [
        { "match": { "title": "foo" }},
        { "match": { "title": "bar" }},
        { "match": { "title": "baz" }}
    ]
}

一致する for each 句を計算し、_scoreそれらを合計してから、句の総数で割ります (もう一度、クエリの正規化係数を適用します)。

したがって、使用しているクエリに完全に依存します。

パラメータをクエリに_score追加すると、 がどのように計算されたかの詳細な説明を取得できます。explain

curl localhost:9200/_search?explain -d '
{
    "query": ....
}'

私の質問は、各スコアをどのように比率として表すことができるかということです。

クエリで何をしたいのかを理解していないと、これに答えることができません。ユース ケースによっては、function_scoreクエリを使用して独自のスコアリング アルゴリズムを実装できます。

于 2014-01-25T11:52:16.573 に答える