elasticsearch,Java,elasticsearch" /> elasticsearch,Java,elasticsearch" />

Elasticsearch:使用java本机api重写查询

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" }

我在Elasticsearch中有一个查询,如果我从命令行运行它,该查询工作得非常好:

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();非常好,我很高兴它成功了!我修正了答案中的密码以防万一。