Elasticsearch Java API boolQuery

Я использую elasticsearch версии 6.4.2

Мне удалось создать запрос GET с помощью REST API, теперь я хотел бы выполнить тот же запрос с помощью JAVA api.

Это запрос:

GET _search
{
   "query":{
      "bool":{
         "must":{
            "match":{
               "tags":"kpi"
            }
         },
         "filter":{
            "range":{
               "@timestamp":{
                  "gt":"now-5m"
               }
            }
         }
      }
   }
}

Я прочитал эту документацию: https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/java-compound-queries.html, но мне все еще не ясно, ищу ли я это и как его использовать. Учтите, что запрос может вернуть много результатов, которые должны быть обработаны моим Java-приложением.

Кроме того, поскольку я должен выполнять этот запрос каждые 5 минут, как я могу его оптимизировать (если это возможно)?

@Spara, можешь объяснить, что еще тебе нужно?

Val 13.11.2018 17:24

@Val, я думаю, что принятый ответ не так хорош, как другой! так что я хочу дать ему награду!

M o 13.11.2018 17:28

Попался, значит, у вас уже есть ответ, отлично ;-)

Val 13.11.2018 17:29
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
3
644
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Если ваш проект основан на maven, вы можете использовать клиентскую зависимость elasticsearch:

<dependency>
    <groupId>org.elasticsearch.client</groupId>
    <artifactId>transport</artifactId>
    <version>5.6.2</version>
</dependency>

ваш необходимый запрос будет:

val query = QueryBuilders.boolQuery()
    .must(
        QueryBuilders.rangeQuery("timestamp").from(startDate)
    )
    .must(
        QueryBuilders.termQuery("tags", "kpi")
    )

и, наконец, для выполнения вашего запроса вы можете использовать client.search(query). client относится к типу RestHighLevelClient.

Ответ принят как подходящий

Вот точный код, который работает:

Date dateFrom = new Date(System.currentTimeMillis() - 300 * 1000);
Date dateTo = new Date(System.currentTimeMillis());

BoolQueryBuilder query = QueryBuilders.boolQuery()
    .must(QueryBuilders.rangeQuery("@timestamp").from(dateFrom).to(dateTo))
    .must(QueryBuilders.matchQuery("tags", "kpi"));

SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.query(query);
SearchRequest searchRequest = new SearchRequest();
searchRequest.source(searchSourceBuilder);
System.out.println(query.toString());
SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);

logger.log(Level.INFO, "Status: {0}", new Object[] { searchResponse.status() });
logger.log(Level.INFO, "Took: {0}", new Object[] { searchResponse.getTook() });
logger.log(Level.INFO, "IsTerminatedEarly: {0}", new Object[] { searchResponse.isTerminatedEarly() });
logger.log(Level.INFO, "TimedOut: {0}", new Object[] { searchResponse.isTimedOut() });
logger.log(Level.INFO, "TotalShards: {0}", new Object[] { searchResponse.getTotalShards() });
logger.log(Level.INFO, "SuccessfulShards: {0}", new Object[] { searchResponse.getSuccessfulShards() });
logger.log(Level.INFO, "FailedShards: {0}", new Object[] { searchResponse.getFailedShards() });
logger.log(Level.INFO, "Total Hits: {0}", new Object[] { searchResponse.getHits().getTotalHits() });

Другие вопросы по теме