6

私はElasticSearchを初めて使用しますが、mvel構文でスクリプトフィールドを定義したら、それをフィルタリングしたり、クエリ本文で他のフィールドと同じように参照したりできますか?

私はこれの例を見つけることができませんが、同時にこれがドキュメントページで可能かどうかについての言及はありません

http://www.elasticsearch.org/guide/reference/modules/scripting/ http://www.elasticsearch.org/guide/reference/api/search/script-fields/

ElasticSearch Serverの本には、これが可能かどうかについては触れられていません。

4

2 に答える 2

11

2018およびElastic6.2の場合でも、で定義されたフィールドでフィルタリングすることはできませんが、同じ目的でscript_fieldsカスタムスクリプトフィルターを定義できます。たとえば、次のスクリプトフィールドを定義したとします。

{
  "script_fields" : {
    "some_date_fld_year":"doc["some_date_fld"].empty ? null : doc["some_date_fld"].date.year"
  }
}

あなたはそれでフィルタリングすることができます

{
  "query": {
    "bool" : {
      "must" : {
        "script" : {
          "script" : {
            "source": " (doc["some_date_fld"].empty ? null : doc["some_date_fld"].date.year) >= 2017",
            "lang": "painless"
          }
        }
      }
    }
  }
}
于 2018-05-08T05:35:34.893 に答える
8

これは、1つの単純な理由で不可能です。つまり、script_fieldsは、検索の最終段階(フェッチフェーズ)で、取得したレコード(デフォルトではトップ10)に対してのみ計算されます。スクリプトフィルターは、先行するフィルターによってフィルターで除外されなかったすべてのレコードに適用され、フェッチフェーズに先行するクエリフェーズ中に発生します。つまり、フィルターが適用されている場合、script_fieldsはまだ存在していません。

于 2013-03-27T01:25:14.207 に答える