ES_BoolQueryBuilder_入门指南

玩转ES搜索:BoolQueryBuilder入门

目录

  1. Elasticsearch 简介
  2. BoolQueryBuilder 基础概念
  3. BoolQueryBuilder 与 MySQL 对比
  4. 实际使用示例
  5. 最佳实践
  6. 常见问题

Elasticsearch 简介

Elasticsearch (ES) 是一个基于 Lucene 的分布式搜索引擎,提供了强大的全文搜索和分析能力。与传统的关系型数据库不同,ES 使用 JSON 文档存储数据,并提供了灵活的查询 DSL (Domain Specific Language)。

BoolQueryBuilder 基础概念

BoolQueryBuilder 是 Elasticsearch 中最重要的查询构建器之一,它允许你组合多个查询条件,类似于 SQL 中的 ANDORNOT 逻辑操作。

四种子查询类型

BoolQueryBuilder 包含四种子查询类型:

  1. must - 必须匹配(相当于 SQL 的 AND
  2. should - 应该匹配(相当于 SQL 的 OR
  3. must_not - 必须不匹配(相当于 SQL 的 NOT
  4. 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"
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值