弹性搜索术语聚合中的问题

问题描述 投票:0回答:1

在弹性搜索聚合查询中,我需要获得观看电影“冻结”的用户观看的所有电影。这是我的结果源码

{
  "_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号酒店”的水桶。

请帮忙。

python amazon-web-services elasticsearch search aggregation
1个回答
1
投票

在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"
        }
      }
    }
  }
}

希望它有效。

© www.soinside.com 2019 - 2024. All rights reserved.