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 查询,并借助上表中的一些子句来将这些条件组合成一个查询。
ICP备案:
公安联网备案: