4

次のように定義されたフィールドマッピングがあります

{"top_seller":{"type":"boolean"}}

私のクエリでは、ブール値に基づいてカスタム スコア クエリを実行しようとしています。髪を引っ張っています。次のようなスクリプトを実行するたびに:

return if(doc['top_seller'].value==true) {10} else {0}

すべてのドキュメントが真の 10 ブーストを取得します。ドキュメントの 1% だけが TRUE に設定されています。=='true' を使用して、==true を使用せずに試しました。三重にしてみました。doc['トップセラー'].value==true?10:0. true/false の代わりに 1/0 を試しました。

1 つの true ドキュメントと 1 つの false ドキュメントを使用して、新しいインデックスと型を作成する実験も行いました。match_all クエリでは、どちらも真の値を持っているかのようにブーストされます。

4

1 に答える 1

19

うわー、気まぐれに、ブール値のコアタイプの設定を見ていました。

The boolean type Maps to the JSON boolean type. It ends up storing within the index either T or F, with automatic translation to true and false respectively.

答えは次のとおりです。

doc['top_seller'].value == 'T' ? 10 : 0

編集: 5.2.x の時点で、ようやく使用できるようになりdoc['top_seller'] ? 10 : 0ました。https://www.elastic.co/guide/en/elasticsearch/reference/current/boolean.html

于 2013-09-23T17:19:59.050 に答える