Elasticsearch bool查询的用法(附带实例)
bool 查询用于根据布尔条件组合其他查询,从而创建复杂的查询逻辑。
bool 查询可以使用 must、must_not、should 和 filter 这 4 种子句来构建搜索,下面的代码展示了包含子句的 bool 查询的格式:
假设我们的需求是搜索满足以下条件的书:
我们需要使用 bool 查询,并借助上表中的一些子句来将这些条件组合成一个查询。
bool 查询可以使用 must、must_not、should 和 filter 这 4 种子句来构建搜索,下面的代码展示了包含子句的 bool 查询的格式:
GET books/_search { "query": { "bool": { ←--- 一个bool查询是由多个 条件布尔子句组合而成的 "must": [{ }], ←--- 查询条件必须匹配文档 "must_not": [{ }], ←--- 查询条件必须不匹配(不影响分数) "should": [{ }], ←--- 查询应该匹配 "filter": [{ }] ←--- 查询必须匹配(不影响分数) } } }正如所见,bool 查询需要使用 must、must_not、should 和 filter 这几种子句中的一种或多种来定义查询条件(见下表)。可以通过组合这些子句来表达多个查询条件。
子句 | 解释 |
---|---|
must | must 子句意味着查询中的搜索条件必须与文档匹配。正向匹配会提高相关性分数。可以使用尽可能多的叶子查询来构建 must 子句。 |
must_not | 在 must_not 子句中,查询条件必须与文档不匹配。这个子句不会影响分数(它在过滤上下文中执行)。 |
should | 在 should 子句中定义的条件不要求强制匹配。但是,如果匹配的话,相关性分数会提高。 |
filter | 在 filter 子句中,查询条件必须与文档匹配,这一点与 must 子句类似。唯一的区别是,filter 子句不影响相关性分数(它在过滤上下文中执行)。 |
假设我们的需求是搜索满足以下条件的书:
- 张三撰写的;
- 评分高于 4.7;
- 2015 年之后出版。
我们需要使用 bool 查询,并借助上表中的一些子句来将这些条件组合成一个查询。