[英]Build ElasticSearch BoolQuery By Using Conditional Statements With Java Api
[英]Elasticsearch Java API boolQuery
我正在使用Elasticsearch 6.4.2版本
我成功使用REST API创建了GET查询,现在我想使用JAVA api执行相同的查询。
这是查询:
GET _search
{
"query":{
"bool":{
"must":{
"match":{
"tags":"kpi"
}
},
"filter":{
"range":{
"@timestamp":{
"gt":"now-5m"
}
}
}
}
}
}
我阅读了此文档: https : //www.elastic.co/guide/zh-CN/elasticsearch/client/java-api/current/java-compound-queries.html,但对于我是否仍然不清楚寻找以及如何使用它。 考虑到查询可能返回很多必须由我的Java应用程序处理的结果。
另外,由于我必须每5分钟执行一次此查询,因此如何优化它(如果可能)?
如果您的项目是基于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() });
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.