Elasticsearch:使用java本机api重写查询
我在Elasticsearch中有一个查询,如果我从命令行运行它,该查询工作得非常好:Elasticsearch:使用java本机api重写查询,java,
elasticsearch,Java,
elasticsearch,我在Elasticsearch中有一个查询,如果我从命令行运行它,该查询工作得非常好: POST http://localhost:9200/YOUR_INDEX_NAME/_search/ { "size": 0, "aggs": { "autocomplete": { "terms": { "field": "autocomplete", "order": { "_count": "desc" }
POST http://localhost:9200/YOUR_INDEX_NAME/_search/
{
"size": 0,
"aggs": {
"autocomplete": {
"terms": {
"field": "autocomplete",
"order": {
"_count": "desc"
},
"include": {
"pattern": "c.*"
}
}
}
},
"query": {
"prefix": {
"autocomplete": {
"value": "c"
}
}
}
}
我尝试使用本机客户端用java重写它:
SearchResponse searchResponse2 = newClient.prepareSearch(INDEX_NAME)
.setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
.setQuery("{\n" +
" \"size\": 0,\n" +
" \"aggs\": {\n" +
" \"autocomplete\": {\n" +
" \"terms\": {\n" +
" \"field\": \"autocomplete\",\n" +
" \"order\": {\n" +
" \"_count\": \"desc\"\n" +
" },\n" +
" \"include\": {\n" +
" \"pattern\": \"c.*\"\n" +
" }\n" +
" }\n" +
" }\n" +
" },\n" +
" \"query\": {\n" +
" \"prefix\": {\n" +
" \"autocomplete\": {\n" +
" \"value\": \"c\"\n" +
" }\n" +
" }\n" +
" }\n" +
"}").get();
for (SearchHit res : searchResponse2.getHits()){
System.out.println(res.getSourceAsString());
}
似乎我在翻译过程中遗漏了一些东西。提前感谢Java客户端
setQuery()
方法在JSON查询中没有字符串,您需要使用QueryBuilders
helper方法和AggregationBuilders
helper方法
在您的情况下,会是这样的:
// build the aggregation
TermsBuilder agg = AggregationBuilders.terms("autocomplete")
.field("autocomplete")
.include("c.*")
.order(Terms.Order.count(false));
// build the query
SearchResponse searchResponse2 = newClient.prepareSearch(INDEX_NAME)
.setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
.setSize(0)
.setQuery(QueryBuilders.prefixQuery("autocomplete", "c"))
.addAggregation(agg)
.get();
不知道为什么否决票。。。对我来说似乎是一个有效的答案。谢谢,AggregationBuilder类在客户端1.7.3中没有任何方法术语(字符串)。你知道其他的选择吗?我的错,对不起,是
AggregationBuilders
,而不是AggregationBuilder
(打字太快)。我修正了答案。是的,完美!!!非常感谢。我只需要在结尾有一个.get():earchResponse searchResponse2=newClient.prepareSearch(INDEX_NAME).setSearchType(SearchType.DFS_QUERY_然后_FETCH).setSize(0).setQuery(QueryBuilders.prefixQuery(“自动完成”,“c”).addAggregation(agg).get();非常好,我很高兴它成功了!我修正了答案中的密码以防万一。