2016-04-05 9 views
1

私は約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.inlinescript.indexedscript.aggsのすべてを有効にしました。
  • 2.0 breaking aggregation changesをチェックしましたが、関連性はありません。

私は、スクリプトなしで集約することができるクエリ自体(集約部分ではなく)でそのフィルタを持つ別のクエリを実行できることはわかっています。要点は、同じ検索結果セットを取り、様々なタイプのフィルタリング(および集約)を行う、さまざまな集約があることです。同じクエリを複数回実行すると生産性が低下し、は受け入れられません

私が知る限り、このをバージョン1.4.4で使用しましたが、バージョン2.2.0では機能しなくなりました。

これはバグですか?あるいは、同じロジックを別々に再実装することもできます。バケットスクリプト集約を介して、または他の任意の?

答えて

2

あなたは新しい集約フレームワークとインライン三角形をGroovyスタイルのスクリプトで試してみましたか?

私は以前、同じ種類の問題に遭遇しました。それが私がそれを解決した方法です。 あなたの集計クエリは次のようになります。あなたもElasticSearchインストールのスクリプトフォルダ内の.groovyファイルとしてスクリプトを定義して、それを試すことができます

"aggs": { 
"2": { 
    "date_histogram": { 
    "field": "startDate", 
    "interval": "month", 
    }, 
    "aggs": { 
    "1": { 
     "sum": { 
     "script": "((condition) ? 1 : 0)", 
     "lang": "expression" 
     } 
    } 
    } 
} 
} 

注意を。

うまくいくと思います。

よろしくお願いいたします。

関連する問題