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客户端:
javaimport 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)、mustNot
和filter
方法来构建布尔查询。
javaimport 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();
}
}
}
详细解释
BoolQueryBuilder
:用于构建布尔查询。must
表示AND条件,should
表示OR条件,mustNot
表示NOT条件,filter
表示过滤条件(不影响评分)。QueryBuilders.termQuery
:用于精确匹配字段值。QueryBuilders.rangeQuery
:用于范围查询,如大于、等于、小于等于等。SearchRequest
:创建搜索请求,指定索引名称。SearchSourceBuilder
:构建搜索源,包含查询条件。RestHighLevelClient.search
:执行搜索请求,返回SearchResponse
。
总结
通过组合BoolQueryBuilder
中的must
和should
方法,可以构建复杂的AND和OR条件查询。以上代码示例展示了如何在Elasticsearch Java客户端中构建和执行包含多个AND和OR条件的查询。根据实际需求,可以调整和扩展查询条件。