我希望ES返回与列表中包含的名为code
的字段匹配的结果。
我有一个列表var codeList = '12A, 13B, 15J'
。我的ES文档都有一个名为code
的字段。我想搜索与codeList中的值匹配的所有文档。
文件:
hits:[
{
._source:{
title: 'Lion',
codes: ['12A']
}
},
{
._source:{
title: 'Lion',
codes: ['13B, 12A']
}
},
{
._source:{
title: 'Lion',
codes: ['15J, XXX']
}
},
]
我只想返回前两个文件,而不是第三个,因为codeList包含这些值。
我有
codeList = results.split(',')// results=12A, 13B, 15J
var data = {
size: 999
q: 'code:'
};
文档代码字段将始终是一个列表,例如:['A1','B2']
。订单无关紧要。只有在codeList数组中存在所有文档'codes
字段时,它才匹配。
答案 0 :(得分:0)
免责声明 - 我希望有更好的解决方案,但是当我面对时 问题以下是我能找到的唯一方法
您无法为此执行Search。
您可以执行Scripting。
指南 - 该脚本将迭代每个文档并将获取文档的数组,将检查您的主列表是否包含文档列表中的所有元素。
我使用groovy脚本(非动态脚本)
实现了以下目标您应该创建脚本文件:
elastic_search_folder\config\scripts\myscript.groovy
您的脚本文件应如下所示:
// Main array
def input = input
// Document's array
def document_input = doc['codes']
input.containsAll(document_input)
剩下的就是构建将运行脚本的查询 - 我建议你阅读有关弹性搜索脚本(特别是groovy)的内容。