我刚刚切换到ElasticSearch 2.2.0,Java API中的addAggregation方法(SearchRespone#prepareResponse ...)似乎已经改变,但是这里的文档显示了一个无效的方法。也许我只是一个相当贫穷的Google员工。
下面这个,由于显而易见的原因(类型不匹配)不会编译:
.setAggregations(AggregationBuilders.significantTerms("termagg").field("item_type").size(100))
.setFrom(0)
.setSize(0)
.setSearchType(SearchType.QUERY_THEN_FETCH)
.setScroll(new TimeValue(60000))
.setExplain(true)
.execute()
.actionGet();
由于新的.addAggregations方法将采用XContent,我尝试使用XContent构建器构建XContent对象,但也无法使其工作。这个看似无限的排列之一我试过看了,但失败了,如下所示:
.setAggregations(AggregationBuilders.terms(“termagg”)。field(“item_type”)。size(100).toXContent(XContentBuilder.builder(XContentFactory.jsonBuilder()),ToXContent.EMPTY_PARAMS))
是否有人知道正确的咒语使这项工作?我在以前的版本中完成了它,关于我的连接,查询和处理响应的其他一切都很好。
谢谢!
更新
这是有效的代码......
SignificantTermsBuilder ghgb = AggregationBuilders.significantTerms("type_in_bin").field("item_type");
SearchResponse response = tc.prepareSearch("someindex")
.setQuery(qb)
.addAggregation(ghgb)
.setFrom(0)
.setSize(250)
.setScroll(new TimeValue(60000))
.setExplain(true)
.execute()
.actionGet();