Moh*_*han 5 arrays intersection elasticsearch
我试图使用elasticsearch来匹配嵌套数组中的所有值.例如.我的搜索数组是["1","2","3","4","5","6","7","8","9"]
,我的文档包含一系列数组
"arr":[
["1","2","10"],
["4","5"],
["8","9","11"]
]
Run Code Online (Sandbox Code Playgroud)
我需要匹配嵌套数组中的所有值,但只有一个嵌套数组需要匹配文档才能匹配.所以,在这个例子中仅第二嵌套阵列是匹配,因为"4"
和"5"
都是本搜索数组中(因此我的文档是一个匹配).我应该使用什么样的查询来实现这一目标?
你可以使用script
像这样的简单Groovy :
def match = false;
for (sub_array in _source.arr) {
match = match || (search_array.intersect(sub_array).size() == sub_array.size())
}
return match;
Run Code Online (Sandbox Code Playgroud)
我们的想法是迭代所有arr
子数组并检查与搜索数组的交集是否与子数组本身的大小相同.
将此包装在script
过滤器中,查询将如下所示:
POST index/type/_search
{
"query": {
"filtered": {
"filter": {
"script": {
"script": "def match = false; for (sub_array in _source.arr) {match = match || (search_array.intersect(sub_array).size() == sub_array.size())}; return match;",
"params": {
"search_array": [ "1", "2", "3", "4", "5", "6", "7", "8", "9" ]
}
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
您还需要确保启用动态脚本以使其正常工作,即在您的elasticsearch.yml
文件中添加script.inline: on
并重新启动您的群集.