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

Elasticsearch must子句的用法(附带实例)

在 Elasticsearch 中,假设我们想找到所有 zhangsan 撰写的书,可以创建一个带有 must 子句的 bool 查询。在 must 子句中,我们编写了一个 match 查询来搜索 zhangsan 撰写的书,代码如下:
GET books/_search
{
  "query": {
    "bool": {  ←---  bool查询
      "must": [{  ←---  must子句:文档必须匹配这一查询条件
          "match": {  ←---  其中一个查询(match查询)匹配Joshua撰写的书
            "author": "zhangsan"
          }
        }]
      }
   }
}
注意,bool 查询被包含在 query 对象中。它有一个 must 子句,这个子句又接受一个由多个查询条件(在这个例子中是匹配 zhangsan 撰写的所有书)组成的数组。

当我们说 must 子句接受一组由多个查询组成的数组时,意味着什么?这意味着我们可以向 must 子句中添加多个查询,使其变得更加复杂。

例如,下面实例中包含一个带有两个叶子查询的 must 子句,其中一个叶子查询是搜索作者的 match 查询,另一个叶子查询是搜索短语的 match_phrase 查询。
GET books/_search
{
  "query": {
    "bool": {
      "must": [{  ←---  带有两个叶子查询的must子句
          "match": {  ←---  match查询查找Joshua撰写的书
            "author": "zhangsan"
          }
        },
        {
          "match_phrase": {  ←---  第二个查询在字段中搜索一个短语
            "synopsis": "best C programming books"
          }
        }]
      }
  }
}

相关文章