乐闻世界logo
搜索文章和话题

Elasticsearch 中的 bool 查询是什么?

1 个月前提问
1 个月前修改
浏览次数11

1个答案

1

Elasticsearch中的bool查询是一种复合查询,它允许你结合多个查询子句,使用布尔逻辑来改善搜索结果的相关性和准确性。主要包括四种子句类型:mustmust_notshould、和 filter

  1. must: 这个子句下的条件必须满足。它对应SQL中的AND操作。例如,如果你需要查找标题中含有"apple"且内容中含有"iphone"的文档,你可以在must子句中放入这两个条件。

  2. must_not: 这个子句下的条件必须不满足,相当于否定条件。它对应SQL中的NOT操作。例如,如果你要排除所有内容中含有"android"的文档,可以将该条件放在must_not中。

  3. should: 在这个子句下的条件不是必须满足的,但如果满足一个或多个,可以提高文档的相关性得分。这类似于SQL中的OR操作。例如,如果一个文档的标题包含"review"或"description",这可能使得这个文档更相关。

  4. filter: 这个子句用于过滤查询结果,但与must不同的是,它不影响得分计算。使用filter可以提高查询效率,因为Elasticsearch会缓存过滤结果。适用于那些你只需要筛选出符合条件的文档,而不关心它们与查询的匹配程度如何的情况。例如,过滤出特定时间范围内的文档。

一个实际的例子是,假设我们正在经营一个电子产品商店的网站,并希望找出评论中提到“耐用”且评分在4星以上,但不包括“昂贵”的产品,可以构建以下查询:

json
{ "query": { "bool": { "must": [ { "match": { "comment": "耐用" } }, { "range": { "rating": { "gte": 4 } } } ], "must_not": [ { "match": { "comment": "昂贵" } } ], "should": [ { "match": { "category": "电子" } } ] } } }

这个查询通过bool查询结合了多个条件,以确保返回的结果既精确又相关。

2024年8月13日 21:38 回复

你的答案