私は約26の結果を返すESクエリを持っています。日付による弾性検索集計のヒストグラムはスクリプトでは機能しなくなった
"aggregations": {
"date_histogram": {
"buckets":[
{"key_as_string":"2016-01-01T00:00:00.000Z", "key":1451606400000, "doc_count":18},
{"key_as_string":"2016-02-01T00:00:00.000Z", "key":1454284800000, "doc_count":8}
]
}
}
これまでのところは良い:検索結果の集約要素は次のようになります
"aggregations" : {
"by_date" : {
"date_histogram" : {
"field" : "startDate",
"interval" : "month"
}
}
}
:
クエリは次のようになります集約ヒストグラム要素を持っています。しかし、私が望むのは、特定の基準に合致しない要素を削除するために検索結果に対してスクリプトを作成することです。だから私は、クエリにこれを追加しました:
"aggregations" : {
"by_date" : {
"date_histogram" : {
"field" : "startDate",
"interval" : "month",
"script" : {
"inline" : "if (condition) {return 1} else {return 0}"
}
}
}
残念ながら、これは単一の結果バケットと凝集が失われる結果:
"date_histogram": {
"buckets": [
{"key_as_string": "1970-01-01T00:00:00.000Z", "key": 0, "doc_count": 26 }
]
}
私が試してみました何:
- をスクリプトを軽減
inline
要素はreturn 1
になります。これにより、依然として壊れた集約が発生します。 - 日付フィールド自体の
value
を返します。結果ClassCastException
- 結果は数値 - のES設定を確認する必要があります。
script.engine.groovy.{file|indexed|inline}.{aggs|mapping|search|update|plugin}
、script.inline
、script.indexed
、script.aggs
のすべてを有効にしました。 - 2.0 breaking aggregation changesをチェックしましたが、関連性はありません。
私は、スクリプトなしで集約することができるクエリ自体(集約部分ではなく)でそのフィルタを持つ別のクエリを実行できることはわかっています。要点は、同じ検索結果セットを取り、様々なタイプのフィルタリング(および集約)を行う、さまざまな集約があることです。同じクエリを複数回実行すると生産性が低下し、は受け入れられません。
私が知る限り、このはをバージョン1.4.4で使用しましたが、バージョン2.2.0では機能しなくなりました。
これはバグですか?あるいは、同じロジックを別々に再実装することもできます。バケットスクリプト集約を介して、または他の任意の?