在弹性搜索聚合查询中,我需要获得观看电影“冻结”的用户观看的所有电影。这是我的结果源码
{
"_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
}
}
}
}
我在桶中得到的结果是正确的,但是电影名称是按照这样的空白分割
"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.x中,隐式分析每个文本字段。要覆盖它,您需要在索引中为文本类型字段创建not_analyzed
的映射,然后在其中插入文档。
在你的情况下,
{
"mappings": {
"user": {
"properties": {
"movies": {
"type": "text",
"index": "not_analyzed",
"fields": {
"keyword": {
"type": "text",
"index": "not_analyzed"
}
}
},
"user_id": {
"type": "long"
}
}
}
}
}
希望它有效。