【发布时间】:2019-02-15 17:07:30
【问题描述】:
在弹性搜索聚合查询中,我需要获取观看电影“冰雪奇缘”的用户观看的所有电影。这就是我的结果来源
{
"_index": "user",
"_type": "user",
"_id": "ovUowmUBREWOv-CU-4RT",
"_version": 4,
"_score": 1,
"_source": {
"movies": [
"Angry birds 1",
"PINNOCCHIO",
"Frozen",
"Hotel Transylvania 3"
],
"user_id": 86
}
}
这是我正在使用的查询。
{
"query": {
"match": {
"movies": "Frozen"
}
},
"size": 0,
"aggregations": {
"movies_like_Frozen": {
"terms": {
"field": "movies",
"min_doc_count": 1
}
}
}
}
我在bucket中得到的结果是正确的,但是电影名称是这样被空格分割的
"buckets": [
{
"key": "3",
"doc_count": 2
},
{
"key": "hotel",
"doc_count": 2
},
{
"key": "transylvania",
"doc_count": 2
},
{
"key": "1",
"doc_count": 1
},
{
"key": "angry",
"doc_count": 1
},
{
"key": "birds",
"doc_count": 1
}
]
我怎样才能得到带有“愤怒的小鸟1”、“特兰西瓦尼亚酒店3”的水桶。
请帮忙。
【问题讨论】:
-
您使用的是哪个 Elasticsearch 版本?
-
版本号“6.2.3”
-
您需要为文本类型字段创建一个映射,6.x中的所有文本字段都默认分析。使用
"index": "not_analyzed"。 -
您无法像现在那样存储电影名称。如果您使用@AshwaniShakya 的方法并以相同的方式保存它们,您的存储桶将如下所示:
{ "key": "Angry birds 1 PINNOCCHIO Frozen Hotel Transylvania 3", "doc_count": 1 } -
我不能将数据存储为列表(就像我现在正在做的那样)。如果不是,我需要如何为用户存储电影
标签: python amazon-web-services elasticsearch search aggregation