-1

で少し困っていcustom_filters_scoreます。個々のスコア0.814913330.125および0.08695652合計されて等しくなり0.1727262ます …</p>

編集:もう一度調べたところ、custom_filters_score の合計が「通常の」クエリで乗算されているようです。

通常のクエリ ( custom_score) をに組み込む方法はありますか、custom_filter_scoreまたは代わりに、elasticsearch に 2 つを (乗算する代わりに) 強制的に加算する方法はありますか?

データ、クエリ、およびマッピングの要点は、https://gist.github.com/sqwk/3d7b25192a236fba82b4にあります。

4

1 に答える 1

1

OK - 何が起こっているのか、ようやくわかりました。まず、gist では、緯度/経度が原因で、クエリがどのドキュメントにも一致しません。ランダムに 1 つのドキュメント (323) を選択し、そこから緯度/経度の値を使用します。

これは私が得る説明です:

 - custom score, score mode [total]                                    |    0.8795
   - Score based on score mode Max and child doc range from 10 to 16   |    1.0000
     - Child[16]                                                       |    1.0000
   - custom score, product of:                                         |    0.2000
     - match filter: cache(object_max_rooms:[4 TO *])                  |    1.0000
     - scriptFactor                                                    |    0.2000
     - queryBoost                                                      |    1.0000
   - custom score, product of:                                         |    0.5714
     - match filter: cache(object_min_living_area:[* TO 125])          |    1.0000
     - scriptFactor                                                    |    0.5714
     - queryBoost                                                      |    1.0000
   - custom score, product of:                                         |    0.1081
     - match filter: cache(object_max_living_area:[125 TO *])          |    1.0000
     - scriptFactor                                                    |    0.1081
     - queryBoost                                                      |    1.0000

ご覧のとおり、緯度/経度は正確に一致するため、スコアは 1 であり、custom_filters_scoreクエリからのスコアは適切に合計されています。

次に、lat値を 50.0852386 から 50.0882386 に変更し、再実行しました。スコアは次のようになります。

 - custom score, score mode [total]                                    |    0.7081
   - Score based on score mode Max and child doc range from 10 to 16   |    0.8050
     - Child[16]                                                       |    0.8050
   - custom score, product of:                                         |    0.2000
     - match filter: cache(object_max_rooms:[4 TO *])                  |    1.0000
     - scriptFactor                                                    |    0.2000
     - queryBoost                                                      |    1.0000
   - custom score, product of:                                         |    0.5714
     - match filter: cache(object_min_living_area:[* TO 125])          |    1.0000
     - scriptFactor                                                    |    0.5714
     - queryBoost                                                      |    1.0000
   - custom score, product of:                                         |    0.1081
     - match filter: cache(object_max_living_area:[125 TO *])          |    1.0000
     - scriptFactor                                                    |    0.1081
     - queryBoost                                                      |    1.0000

したがって、フィルターからのスコアはクエリからのスコアと結合され、正規化されます。これは予想されることです。はscore_modeフィルターにのみ適用され、フィルターとクエリの組み合わせには適用されません。

それらを正確に組み合わせたい場合は、距離計算をクエリからフィルターの下のcustom_filters_scoreフィルターに移動する必要があります。問題は、scriptfor スコアリング がネストされたドキュメントにアクセスplacesできないため、それを行うことができないことです。

正確な合計がなぜそれほど重要なのでしょうか? を絶対値と見なしては_scoreなりません。各ドキュメントの相対的な重要性を反映しているだけです。要件に対して「正しい」順序が得られるまで、各句の影響を微調整するだけです。

于 2013-03-30T11:49:39.200 に答える