我有一个带有映射的字段:
"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查询来收集所有包含给定标签的文档。
如何在所有文档中搜索标签并选择包含给定标签的文档?
谢谢
答案 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)