Elastic Search从数组字段中选择元素

时间:2019-02-08 20:49:27

标签: elasticsearch

我在弹性搜索中具有以下格式的数据。

{
"fname": "FN1",
  "lname": "LN1",
  "images": [
    {
      "type": "passport",
      "url": ".."
    },
    {
      "type": "full",
      "url": ".."
    },
    {
      "type": "full",
      "url": ".."
    }
    ]
}

在通过弹性搜索获取数据时,是否可以从数组字段中选择性地选择项目,例如,是否可以在图像数组中仅包含类型为“ passport”的对象?

1 个答案:

答案 0 :(得分:1)

Nested inner hits可以助您一臂之力,但名称暗示您正在处理的字段的数据类型应为nested。假设字段图像的数据类型为nested,则可以基于images.type进行过滤并利用nested_hits仅返回匹配的嵌套文档。

因此查询如下:

{
  "query": {
    "bool": {
      "filter": [
        {
          "nested": {
            "path": "images",
            "query": {
              "term": {
                "images.type": "passport"
              }
            },
            "inner_hits": {}
          }
        }
      ]
    }
  }
}