2016-08-11 7 views
0

を使用して、インラインスクリプトを提供します今までElasticSearch:私は、Java APIを使用して集約を構築する必要があるのJava API

GET /sales/t/_search 
{ 
    "aggs": { 
    "group_by_month": { 
     "terms": { 
     "script": "def opDate = new DateTime(doc['date'].date); opDate.getMonthOfYear()", 
     "order": { 
      "_term": "asc" 
     } 
     } 
    } 
    } 
} 

を、私はterms aggregationを作成することができたが、しかし、私はにできませんよスクリプトを提供してください:

AggregationBuilders.terms(this.getName()).field(this.getName()).script(??????????) 

どのようにJava APIを使用してインラインスクリプトを提供するのですか?単純にこのような

答えて

1

(ちなみにfield()コールは必要ありません):

AggregationBuilders.terms(this.getName()) 
    .script(new Script("def opDate = new DateTime(doc['date'].date); opDate.getMonthOfYear()")) 

注意、しかし、あなたのスクリプトは、このような、はるかに単純できること:

doc['date'].date.getMonthOfYear() 

理由がありますdoc['date'].dateは既にDateTimeインスタンスです。

+0

解決済み!ありがとう。それにもかかわらず、この集計は、毎月2倍の「LongTerms」バケット集計結果を返します。 'terms'集約バケットを設定する方法は、double型ではなくlong型であるのでしょうか? – Jordi

+0

申し訳ありませんが、私には 'DoubleTerms' – Jordi

関連する問題