java调用ElasticSearch查询 字段id为string类型 等于199, 字段kpi1值大于0 或kpi2值大于0,字段kpi1和kpi2是或的关系,与id是且的关系
时间: 2023-12-10 16:40:01 浏览: 21
可以使用ElasticSearch的bool查询和range查询来实现这个需求。具体实现如下:
```
// 创建ElasticSearch的客户端
RestHighLevelClient client = new RestHighLevelClient(
RestClient.builder(new HttpHost("localhost", 9200, "http")));
// 创建查询的bool条件
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
// 添加id等于199的条件
TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("id", "199");
boolQueryBuilder.must(termQueryBuilder);
// 添加kpi1大于0或kpi2大于0的条件
RangeQueryBuilder rangeQueryBuilder1 = QueryBuilders.rangeQuery("kpi1").gt(0);
RangeQueryBuilder rangeQueryBuilder2 = QueryBuilders.rangeQuery("kpi2").gt(0);
boolQueryBuilder.should(rangeQueryBuilder1).should(rangeQueryBuilder2);
// 执行查询
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder().query(boolQueryBuilder);
SearchRequest searchRequest = new SearchRequest("index_name").source(sourceBuilder);
SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
// 处理查询结果
SearchHits hits = searchResponse.getHits();
for (SearchHit hit : hits) {
// 处理每一条查询结果
}
// 关闭客户端
client.close();
```
其中,`RestHighLevelClient`是ElasticSearch的Java客户端,需要先创建一个实例。`QueryBuilders`是ElasticSearch提供的查询构造器,用于构造各种查询条件。
首先创建一个`BoolQueryBuilder`,用于存放多个查询条件。然后添加一个`TermQueryBuilder`,用于查询id等于199的记录。接着添加两个`RangeQueryBuilder`,分别查询kpi1大于0或kpi2大于0的记录,并将它们设置为或的关系。最后使用`SearchSourceBuilder`将`BoolQueryBuilder`作为查询条件,并执行查询。
查询结果通过`SearchResponse`返回,可以通过`hits`属性获取到具体的查询结果。