Elasticsearch嵌套类型选择查询

时间:2019-03-15 23:53:39

标签: elasticsearch

我有一个带有映射的字段:

   "my_field_name": {
            "type": "nested",
            "properties": {
              "labels": {
                "type": "text"
              },
              "source": {
                "type": "text"
              }
            }
          }

当我放入数据时,格式如下:

"my_field_name": {
            "url_of_an_image": [
              "tag1",
              "tag2",
              "tag3",
              "tag4",
              "tag5"
            ],
            "url_of_an_image2": [
              "tag4",
              "tag5",
              "tag6",
              "tag7",
              "tag8"
            ]
}

我想编写一个Elasticsearch查询来收集所有包含给定标签的文档。

如何在所有文档中搜索标签并选择包含给定标签的文档?

谢谢

2 个答案:

答案 0 :(得分:1)

评论后编辑

首先要考虑的是,映射与文档的结构不匹配,例如my_field_name既没有labels也没有source字段。哪个能更好地代表您的数据?

作为第二个考虑因素,您在评论中说

  

查询时我不知道“ url_of_an_image”,因为每个文档都不同

但是,从您的示例来看,url_of_an_image似乎是my_field_name的项目的属性,而不是文档的属性。因此,我建议您执行以下操作:

"my_field_name": [
  {
    "image_url": "url_of_an_image",
    "tags": [
       "tag1",
       "tag2",
       "tag3",
       "tag4",
       "tag5"
    ]
  },
  {
    "image_url": "url_of_an_image2",
    "tags": [
       "tag4",
       "tag5",
       "tag6",
       "tag7",
       "tag8"
    ]
  }
]

这将是映射:

"my_field_name": {
  "type": "nested",
  "properties": {
     "image_url": {
       "type": "text"
     },
     "tags": {
       "type": "text"
    }
  }
}

这样,您可以运行以下查询:

{
  "query": {
    "nested" : {
      "path" : "my_field_name",
      "query" : {
        "bool" : {
          "must" : [
            { "match" : {"my_field_name.image_url" : "url_of_an_image2"} },
            { "match" : {"my_field_name.tags" : "tag3"} }
          ]
        }
      }
    }
  }
}

答案 1 :(得分:0)