使用按字段列表在Elasticsearch中搜索

时间:2016-09-06 19:16:55

标签: node.js elasticsearch

我希望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字段时,它才匹配。

1 个答案:

答案 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)的内容。