Elasticsearch查询之间的区别

时间:2019-01-14 19:38:04

标签: elasticsearch elasticsearch-2.4

我很难弄清楚为什么这两个查询不能返回相同数量的结果(我使用的是Elasticsearch 2.4.1):

{
  "nested": {
    "path": "details",
    "filter": [
      { "match": { "details.id": "color" } },
      { "match": { "details.value_str": "red" } }
    ]
  }
}
{
  "nested": {
    "path": "details",
    "filter": {
      "bool": {
        "must": [
          { "match": { "details.id": "color" } },
          { "match": { "details.value_str": "red" } }
        ]
      }
    }
  }
}

第一个查询有更多结果。

我的猜测是,第一个查询中的filter子句的工作方式类似于or / should,但是如果我将第二个查询中的must替换为should,查询产生的结果数量要多于这两个查询。

这些查询的含义有何不同?

恐怕我对索引文件的结构一无所知;我所知道的是每个查询返回多少行。

1 个答案:

答案 0 :(得分:2)

第一个查询是错误的,嵌套的filter不能是数组,因此我怀疑ES无法正确解析它,并且只匹配了一个而不是两个匹配,这可能就是为什么它返回比第二个。

第二个查询在嵌套过滤器方面是正确的,并且可以产生您期望的结果。