玩转ES搜索:BoolQueryBuilder入门
目录
Elasticsearch 简介
Elasticsearch (ES) 是一个基于 Lucene 的分布式搜索引擎,提供了强大的全文搜索和分析能力。与传统的关系型数据库不同,ES 使用 JSON 文档存储数据,并提供了灵活的查询 DSL (Domain Specific Language)。
BoolQueryBuilder 基础概念
BoolQueryBuilder 是 Elasticsearch 中最重要的查询构建器之一,它允许你组合多个查询条件,类似于 SQL 中的 AND、OR、NOT 逻辑操作。
四种子查询类型
BoolQueryBuilder 包含四种子查询类型:
- must - 必须匹配(相当于 SQL 的
AND) - should - 应该匹配(相当于 SQL 的
OR) - must_not - 必须不匹配(相当于 SQL 的
NOT) - filter - 过滤条件(不计算评分,性能更好)
基本语法结构
BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
// 添加 must 条件
boolQuery.must(QueryBuilders.termQuery("status", "published"));
// 添加 should 条件
boolQuery.should(QueryBuilders.matchQuery("title", "elasticsearch"));
// 添加 must_not 条件
boolQuery.mustNot(QueryBuilders.termQuery("deleted", true));
// 添加 filter 条件
boolQuery.filter(QueryBuilders.rangeQuery("publish_date").gte("2023-01-01"));
BoolQueryBuilder 与 MySQL 对比
1. 基本等值查询
MySQL:
SELECT * FROM articles WHERE status = 'published';
Elasticsearch:
BoolQueryBuilder query = QueryBuilders.boolQuery()
.must(QueryBuilders.termQuery("status", "published"));
2. AND 条件组合
MySQL:
SELECT * FROM articles
WHERE status = 'published'
AND category = 'tech'
AND author_id = 123;
Elasticsearch:
BoolQueryBuilder query = QueryBuilders.boolQuery()
.must(QueryBuilders.termQuery("status", "published"))
.must(QueryBuilders.termQuery("category", "tech"))
.must(QueryBuilders.termQuery("author_id", 123));
3. OR 条件组合
MySQL:
SELECT * FROM articles
WHERE category = 'tech'
OR category = 'science'
OR category = 'programming';
Elasticsearch:
BoolQueryBuilder query = QueryBuilders.boolQuery()
.should(QueryBuilders.termQuery("category", "tech"))
.should(QueryBuilders.termQuery("category", "science"))
.should(QueryBuilders.termQuery("category", "programming"))
.minimumShouldMatch(1); // 至少匹配一个条件
4. NOT 条件
MySQL:
SELECT * FROM articles
WHERE status = 'published'
AND NOT deleted = true;
Elasticsearch:
BoolQueryBuilder query = QueryBuilders.boolQuery()
.must(QueryBuilders.termQuery("status"

最低0.47元/天 解锁文章
321

被折叠的 条评论
为什么被折叠?



