Elasticsearch中的对象阵列搜索支持

时间:2017-10-12 06:16:03

标签: elasticsearch

我在弹性搜索中有一个对象数组。

我想搜索特定字段值是否出现在数组的前2位而不使用脚本

想象一下我的ES数据如下

[
  {
    "_id": "TestID1",
    "data": [
      {
        "name": "Test1",
        "priority": 2
      },
      {
        "name": "Test2",
        "priority": 3
      },
      {
        "name": "Test3",
        "priority": 4
      }
    ]
  },
  {
    "_id": "TestID2",
    "data": [
      {
        "name": "Test3",
        "priority": 2
      },
      {
        "name": "Test9",
        "priority": 3
      },
      {
        "name": "Test5",
        "priority": 4
      },
      {
        "name": "Test10",
        "priority": 5
      }
    ]
  },
  {
    "_id": "TestID3",
    "data": [
      {
        "name": "Test1",
        "priority": 2
      },
      {
        "name": "Test2",
        "priority": 3
      },
      {
        "name": "Test3",
        "priority": 6
      }
    ]
  }
]

在这里,我想创建一个查询,在数据数组的前2个元素中搜索_Test3_ ONLY

在此处搜索会返回结果

_id: TestID2's数据

因为只有TestID2在数据数组的前2位中有Test3

1 个答案:

答案 0 :(得分:0)

如果不使用脚本,将无法直接执行此类请求。我能想到的唯一解决方案是创建仅包含前两个元素的数组字段的副本。然后,您将可以在此字段上进行搜索。

您可以添加ingest pipeline来自动修剪数组。

PUT /_ingest/pipeline/top2_elements
{
    "description": "Create a top2 field containing only the first two values of an array",
    "processors": [
      {
        "script": {
          "source": "ctx.top2 = [ctx.data[0], ctx.data[1]]"
        }
      }
    ]
}