5

キーワードの配列からキーワードの配列を検索するときに、ElasticSearch でカスタム スコアリングを行う方法について誰かアドバイスしてもらえますか?

たとえば、次のように、各ドキュメントにキーワードの配列があるとします。

{ // doc 1
    keywords : [ 
            red : {
                    weight : 1
                }, 
            green : {
                    weight : 2.0
                },
            blue : {
                    weight: 3.0
                },
            yellow : {
                    weight: 4.3
                }
        ]
},
{ // doc 2
    keywords : [ 
            red : {
                    weight : 1.9
                }, 
            pink : {
                    weight : 7.2
                },
            white : {
                    weight: 3.1
                },
        ]
},
...

そして、この配列に対してキーワードを一致させる検索に基づいて、各ドキュメントのスコアを取得したいと考えています。

{
    keywords : [
            red : {
                    weight : 2.2
                }, 
            blue : {
                    weight : 3.3
                },
        ]
}

ただし、一致するかどうかを判断するだけでなく、非常に具体的なスコアリング アルゴリズムを使用したいと考えています。

ここに画像の説明を入力

単一のフィールドにスコアを付けるのは簡単ですが、配列でそれを管理する方法がわかりません。何かご意見は?

4

1 に答える 1

1

ああ、興味深い質問です!(そして、コミュニケーションで解決できると思います)

まず、カスタム スクリプト スコアリングについて調べましたか? これでゆっくりできると思います。これを行う場合は、ドキュメントがヒットしたことがわかった後にのみスコアリングが計算される再スコアリングフェーズを行うことを検討します。

ただし、elasticsearch 機械でこれを行うことができると思います。私が解決できるように、ドキュメント間で内積を行っています(実際には、重みは指定したものと1の中間です)。

したがって、私の最初の提案は、「カスタム スコアリング」(内積) から x/2n 項を削除し、重みを 1 とカスタム ウェイトの中間に置くことです (例: 1.9 => 1.45)。

... 申し訳ありませんが、戻ってこの質問を編集する必要があります。フィールドで定義されたブースト レベルでネストされたドキュメントを使用することを考えていましたが、残念ながら、_boostマッピング パラメーターはルート ドキュメントでのみ使用できます。

PSちょうど考えていた、定義されたブーストレベルを持つフィールドを持ち、そこに用語を保存することができます。そうすれば、これを簡単に行うことができますが、精度が失われます. ドキュメントは次のようになります。

{
  "boost_1": ["aquamarine"],
  "boost_2": null, //don't need to send this, just showing for clarity
  ...
  "boost_5": ["burgundy", "fuschia"]
  ...
}

次に、マッピングでこれらのブースティングを定義できます。注意すべきことの 1 つは、フィールド ブースト値が_allフィールドに引き継がれることです。そのため、フィールドに重み付けされた用語のバッグができ、さまざまなブースト (2 番目の重みの場合) を持つ多くのクエリを使用し_allてクエリを作成できます。ドキュメント)。bool: shouldterm

どう考えているか教えてください!非常に興味深い質問です。

于 2013-08-21T11:52:50.937 に答える