无法理解此Elasticsearch查询

时间:2017-03-22 10:07:27

标签: elasticsearch

{
  "query": {
    "nested": {
      "path": "product_vendors",
        "query": {
            "bool" :{
                "must" : {
                    "bool" : {
                        "should" : [
                            { "terms": {"product_vendors.manufacturer_style":["FSS235D-26","SG463-1128-5","SG463-2879-4"]}},
                            { "terms": {"product_vendors.id":["71320"]}}
                        ]
                    }
                }
            }
        }
    }
  }
}

我有上面的弹性查询,无法理解这一点。有人请说明它的含义以及它将返回哪些文件?

更新:@christinabo,我尝试了你的查询,并返回了结果,但这里有一些小问题,除了匹配的文件外,还有两个额外的文件在这些文件中返回,只有vendor_id匹配,我可能知道为什么两个额外的不匹配文件正在返回,我们是否需要某些属性或某些内容以确保允许严格的搜索和返回,可以请对此进行建议。

1 个答案:

答案 0 :(得分:0)

通过观察查询,我可以理解数据中有一个nested对象。我可以想象它有这种结构:

product_vendors: {
   'id': 'the_id',
   'manufacturer_style': 'some style'
}

要查询嵌套对象,您需要nested query。这就是你在那里有嵌套关键字的原因。在嵌套查询中,您需要指定通向嵌入字段的pathproduct_vendors)(idmanufacturer_style)。

然后,查询使用must关键字定义bool查询,这意味着后面的查询必须出现在匹配的文档中。在这种情况下,它必须出现的是另一个使用should关键字定义的bool查询。这包含两个terms子查询(一个用于manufacturer_style,一个用于id),表示匹配的文档应匹配其中的一个或两个。每个子查询通过使用点(即product_vendors.manufacturer_style)指定嵌套对象的整个路径来查询嵌入字段。

我希望查询能够返回与{{>>至少一个 terms个查询匹配的文档,其中两个文档都匹配得更高。

我希望这个解释可以让您全面了解此查询。

有关文档here中的bool查询的更多信息。