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

Elasticsearch Java API boolQuery

Elasticsearch Java API boolQuery,java,elasticsearch,Java,elasticsearch,我使用的是elasticsearch版本6.4.2 我成功地使用RESTAPI创建了一个GET查询,现在我想使用JavaAPI执行相同的查询 以下是查询: GET _search { "query":{ "bool":{ "must":{ "match":{ "tags":"kpi" } }, "filter":{ "ran

我使用的是elasticsearch版本6.4.2

我成功地使用RESTAPI创建了一个GET查询,现在我想使用JavaAPI执行相同的查询

以下是查询:

GET _search
{
   "query":{
      "bool":{
         "must":{
            "match":{
               "tags":"kpi"
            }
         },
         "filter":{
            "range":{
               "@timestamp":{
                  "gt":"now-5m"
               }
            }
         }
      }
   }
}
我阅读了这个文档:但我仍然不清楚这是否是我正在寻找的,以及如何使用它。 考虑到查询可以返回许多必须由java应用程序处理的结果。
另外,由于我必须每5分钟执行一次此查询,我如何优化它(如果可能)?

如果您的项目基于maven,您可以使用elasticsearch客户端依赖项:

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

最后,要执行查询,可以使用
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() });

@斯巴拉,你能解释一下你还需要什么吗?@Val,我认为公认的答案不如另一个好!所以我想给他赏金!明白了,你已经有答案了,太好了;-)
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() });