本书基于 Elasticsearch 2.x 版本,有些内容可能已经过时。 Elasticsearch: 权威指南 » 深入搜索 » 全文搜索 » 如何使用布尔匹配 « 组合查询 查询语句提升权重 »
如何使用布尔匹配编辑
目前为止,可能已经意识到多词 match
查询只是简单地将生成的 term
查询包裹
在一个 bool
查询中。如果使用默认的 or
操作符,每个 term
查询都被当作 should
语句,这样就要求必须至少匹配一条语句。以下两个查询是等价的:
{ "match": { "title": "brown fox"} }
{ "bool": { "should": [ { "term": { "title": "brown" }}, { "term": { "title": "fox" }} ] } }
如果使用 and
操作符,所有的 term
查询都被当作 must
语句,所以 所有(all) 语句都必须匹配。以下两个查询是等价的:
{ "match": { "title": { "query": "brown fox", "operator": "and" } } }
{ "bool": { "must": [ { "term": { "title": "brown" }}, { "term": { "title": "fox" }} ] } }
如果指定参数 minimum_should_match
,它可以通过 bool
查询直接传递,使以下两个查询等价:
{ "match": { "title": { "query": "quick brown fox", "minimum_should_match": "75%" } } }
{ "bool": { "should": [ { "term": { "title": "brown" }}, { "term": { "title": "fox" }}, { "term": { "title": "quick" }} ], "minimum_should_match": 2 } }
|
因为只有三条语句, |
当然,我们通常将这些查询用 match
查询来表示,但是如果了解 match
内部的工作原理,我们就能根据自己的需要来控制查询过程。有些时候单个 match
查询无法满足需求,比如为某些查询条件分配更高的权重。我们会在下一小节中看到这个例子。
Getting Started Videos
- Starting Elasticsearch
- Introduction to Kibana
- Logstash Starter Guide
官方地址:https://www.elastic.co/guide/cn/elasticsearch/guide/current/_how_match_uses_bool.html