这是我正在尝试创建查询的json文档的示例 . “params”字段被映射为“嵌套” .
{
"images": [
{
"name": "1907183375555f7c44126f23.67610475.png"
},
{
"name": "5693836375575c567764bc2.87695507.png"
}
],
"sku": "MYSKU",
"class": "some_class",
"params": [
{
"name": "item1",
"value": "item1value"
},
{
"name": "item2",
"value": "item2value"
},
{
"name": "item3",
"value": "item3value"
},
{
"name": "item4",
"value": "item4value"
},
{
"name": "item5",
"value": "item5value"
}
]
}
如何创建将在sku,类和嵌套参数上搜索的筛选查询?例如 . 在伪代码中,我会在sku和类上有"bool" "must",然后在构成文档的每个参数上都有"nested" "filter" "bool" "must" . 在https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-nested-filter.html我可以看到如何使用嵌套在文档上,其中每个嵌套字段是唯一的字段名称,但在我的文档中,每个数组元素都有"name"和"value" .
看起来这应该很简单 .
1 回答
这应该做(例如):
请注意,您要匹配的每个嵌套文档都有单独的
nested
过滤器子句(我只包括两个,但您可以包含任意数量);如果我们在单个nested
子句中使用bool
,在内部bool
内部有一堆过滤器,ES会尝试找到一个匹配所有提供的过滤器的嵌套文档 . 这样我们告诉ES,nested
过滤器不必全部应用于同一嵌套文档 .这是我用来测试它的代码:
http://sense.qbox.io/gist/26552d6a8a285c7715b0ac4feab08bd283971664