{
"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匹配,我可能知道为什么两个额外的不匹配文件正在返回,我们是否需要某些属性或某些内容以确保允许严格的搜索和返回,可以请对此进行建议。
答案 0 :(得分:0)
通过观察查询,我可以理解数据中有一个nested
对象。我可以想象它有这种结构:
product_vendors: {
'id': 'the_id',
'manufacturer_style': 'some style'
}
要查询嵌套对象,您需要nested query
。这就是你在那里有嵌套关键字的原因。在嵌套查询中,您需要指定通向嵌入字段的path
(product_vendors
)(id
,manufacturer_style
)。
然后,查询使用must
关键字定义bool查询,这意味着后面的查询必须出现在匹配的文档中。在这种情况下,它必须出现的是另一个使用should
关键字定义的bool查询。这包含两个terms
子查询(一个用于manufacturer_style
,一个用于id
),表示匹配的文档应匹配其中的一个或两个。每个子查询通过使用点(即product_vendors.manufacturer_style
)指定嵌套对象的整个路径来查询嵌入字段。
我希望查询能够返回与{{>>至少一个 terms
个查询匹配的文档,其中两个文档都匹配得更高。
我希望这个解释可以让您全面了解此查询。
有关文档here中的bool查询的更多信息。