Как запросить отдельные записи из Elasticsearch через API - PullRequest
0 голосов
/ 01 октября 2018

У меня есть следующий запрос Elasticsearch get:

GET /...
{
   "size":"0",
   "aggs" : {
      "locations" : {
         "terms" : { "field" : "locationid.keyword" }
      }
   }
}

, который работает на консоли, как и должно.Но цель состоит в том, чтобы этот запрос был программным с помощью Java API.Я использую Spring Boor с ElasticSearchRepository:

@Query("{\"size\" : \"0\" , \"aggs\" : {\"locations\" : {\"terms\" : { \"field\" : \"locationid.keyword\" }}}}")
List<Bucket> findDistinctLocationids();

Итак, теперь моя проблема заключается в следующем исключении:

ParsingException[size] query malformed, no start_object after query name

Сообщение об ошибке ясно, но какая аннотация или полезна для этогодело вместо @Query?Или есть какой-то другой способ получить разные записи?

1 Ответ

0 голосов
/ 02 октября 2018

Итак, после нескольких часов попыток и ошибок я нашел решение, основанное на комментарии @Vals.Во-первых, я настроил поиск, который дает мне SearchResponse:

final SearchResponse sr = client.prepareSearch("index").setTypes("type").setQuery(QueryBuilders.matchAllQuery()).setSearchType(SearchType.DEFAULT).addAggregation(
            AggregationBuilders.terms("field").field("locationid.keyword")).execute().actionGet();

Из этого ответа я получаю объект Условия, который содержит результаты в его Bucktes:

final Terms locations = sr.getAggregations().get("field");
for (final Terms.Bucket entry : locations.getBuckets()) {
    System.out.println(entry.getKey());
    System.out.println(entry.getDocCount());
}

с точнорезультат как в консоли дается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...