elasticsearch 用java client 多个and or 条件 怎么写?

在Elasticsearch中使用Java客户端(如Elasticsearch High Level REST Client)来构建复杂的查询,包括多个AND和OR条件,可以使用BoolQueryBuilder来组合各种查询条件。

1. 引入依赖

首先确保你的项目中包含Elasticsearch High Level REST Client的依赖。如果使用Maven,可以在pom.xml中添加以下依赖:

xml
<dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>elasticsearch-rest-high-level-client</artifactId> <version>7.10.2</version> <!-- 请根据实际使用的Elasticsearch版本选择合适的版本 --> </dependency>

2. 初始化客户端

在进行查询之前,需要初始化Elasticsearch客户端:

java
import org.elasticsearch.client.RestHighLevelClient; import org.elasticsearch.client.RestClient; import org.apache.http.HttpHost; RestHighLevelClient client = new RestHighLevelClient( RestClient.builder( new HttpHost("localhost", 9200, "http") ) );

3. 构建复杂查询

使用BoolQueryBuilder来组合多个AND和OR条件。BoolQueryBuilder提供了must(相当于AND)、should(相当于OR)、mustNotfilter方法来构建布尔查询。

java
import org.elasticsearch.index.query.BoolQueryBuilder; import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.index.query.QueryBuilder; import org.elasticsearch.action.search.SearchRequest; import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.client.RequestOptions; import org.elasticsearch.search.builder.SearchSourceBuilder; public class ElasticsearchQueryExample { public static void main(String[] args) { try (RestHighLevelClient client = new RestHighLevelClient( RestClient.builder( new HttpHost("localhost", 9200, "http") ) )) { // 构建查询 BoolQueryBuilder boolQuery = QueryBuilders.boolQuery(); // 添加AND条件 boolQuery.must(QueryBuilders.termQuery("field1", "value1")); boolQuery.must(QueryBuilders.rangeQuery("field2").gte(10).lte(20)); // 添加OR条件 BoolQueryBuilder orQuery = QueryBuilders.boolQuery(); orQuery.should(QueryBuilders.termQuery("field3", "value3")); orQuery.should(QueryBuilders.termQuery("field4", "value4")); boolQuery.must(orQuery); // 创建搜索请求 SearchRequest searchRequest = new SearchRequest("your_index"); SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); searchSourceBuilder.query(boolQuery); searchRequest.source(searchSourceBuilder); // 执行搜索请求 SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT); // 处理响应 System.out.println(searchResponse); } catch (Exception e) { e.printStackTrace(); } } }

详细解释

  1. BoolQueryBuilder:用于构建布尔查询。must表示AND条件,should表示OR条件,mustNot表示NOT条件,filter表示过滤条件(不影响评分)。
  2. QueryBuilders.termQuery:用于精确匹配字段值。
  3. QueryBuilders.rangeQuery:用于范围查询,如大于、等于、小于等于等。
  4. SearchRequest:创建搜索请求,指定索引名称。
  5. SearchSourceBuilder:构建搜索源,包含查询条件。
  6. RestHighLevelClient.search:执行搜索请求,返回SearchResponse

总结

通过组合BoolQueryBuilder中的mustshould方法,可以构建复杂的AND和OR条件查询。以上代码示例展示了如何在Elasticsearch Java客户端中构建和执行包含多个AND和OR条件的查询。根据实际需求,可以调整和扩展查询条件。