首页 > 编程笔记 > 通用技能 阅读:2

Elasticsearch 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 这几种子句中的一种或多种来定义查询条件(见下表)。可以通过组合这些子句来表达多个查询条件。

表:bool查询子句
子句 解释
must must 子句意味着查询中的搜索条件必须与文档匹配。正向匹配会提高相关性分数。可以使用尽可能多的叶子查询来构建 must 子句。
must_not 在 must_not 子句中,查询条件必须与文档不匹配。这个子句不会影响分数(它在过滤上下文中执行)。
should 在 should 子句中定义的条件不要求强制匹配。但是,如果匹配的话,相关性分数会提高。
filter 在 filter 子句中,查询条件必须与文档匹配,这一点与 must 子句类似。唯一的区别是,filter 子句不影响相关性分数(它在过滤上下文中执行)。

假设我们的需求是搜索满足以下条件的书:
我们需要使用 bool 查询,并借助上表中的一些子句来将这些条件组合成一个查询。

相关文章