Spring Boot Elasticsearch 查询:使用 SearchSourceBuilder 实现 AND 和 OR 查询
在 Spring Boot 环境下使用 SearchSourceBuilder 进行 AND 和 OR 查询,你可以使用 Elasticsearch 的 Java API 来构建查询。
首先,你需要添加 Elasticsearch 的依赖到你的项目中。在 pom.xml 文件中添加以下依赖:
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>7.15.2</version>
</dependency>
然后,你可以使用 SearchSourceBuilder 来构建查询。下面是一个使用 AND 和 OR 查询的示例:
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.unit.Fuzziness;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class ElasticSearchService {
@Autowired
private RestHighLevelClient client;
public void searchWithAndOrQuery() {
SearchRequest searchRequest = new SearchRequest('your_index_name');
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
boolQueryBuilder.must(QueryBuilders.matchQuery('field1', 'value1'));
boolQueryBuilder.mustNot(QueryBuilders.matchQuery('field2', 'value2'));
BoolQueryBuilder orQueryBuilder = QueryBuilders.boolQuery();
orQueryBuilder.should(QueryBuilders.matchQuery('field3', 'value3'));
orQueryBuilder.should(QueryBuilders.matchQuery('field4', 'value4'));
boolQueryBuilder.should(orQueryBuilder);
searchSourceBuilder.query(boolQueryBuilder);
searchRequest.source(searchSourceBuilder);
try {
SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
// 处理搜索结果
} catch (Exception e) {
// 处理异常
}
}
}
在上述示例中,我们首先创建一个 SearchRequest 对象,并指定要搜索的索引名称。然后,我们创建一个 SearchSourceBuilder 对象,并使用 QueryBuilders 构建 BoolQueryBuilder 来构建 AND 和 OR 查询。在 BoolQueryBuilder 中,我们使用 must 方法添加 AND 查询条件,使用 mustNot 方法添加 NOT 查询条件。然后,我们创建一个新的 BoolQueryBuilder 对象来构建 OR 查询条件,并使用 should 方法添加 OR 查询条件。最后,我们将 BoolQueryBuilder 对象设置为 SearchSourceBuilder 的查询条件,并将 SearchSourceBuilder 对象设置为 SearchRequest 的 source。
最后,我们使用 RestHighLevelClient 来执行搜索请求,并处理搜索结果或异常。
请注意,上述示例中的 'your_index_name' 应该替换为你实际的索引名称,'field1'、'value1' 等应该替换为你实际的字段名和查询值。
希望这可以帮助到你!
原文地址: https://www.cveoy.top/t/topic/pUdA 著作权归作者所有。请勿转载和采集!