簡體   English   中英

Elasticsearch:使用Java本機API重寫查詢

[英]Elasticsearch: rewrite a query using java native api

我在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()方法並不需要一個String與JSON查詢,則需要建立查詢使用QueryBuilders輔助方法,並建立聚集你的AggregationBuilders輔助方法。

在您的情況下,將如下所示:

// 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();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM