Elasticsearch Java API boolQuery
我使用的是elasticsearch版本6.4.2 我成功地使用RESTAPI创建了一个GET查询,现在我想使用JavaAPI执行相同的查询 以下是查询: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
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() });