弹性搜索查询之间的区别

Difference between elasticsearch queries

我很难弄清楚为什么这两个查询没有 return 相同数量的结果(我使用的是 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,查询产生的结果数量多于这两个。

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

恐怕我不了解索引文档的结构;我只知道每个查询有多少行 returns.

第一个查询错误,嵌套的filter不能是数组,所以我怀疑ES没有正确解析它,只取一个匹配而不是两个匹配,这可能是它[=15的原因=]比第二个数据多

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