【问题标题】:issue in Elastic Search Term Aggregation弹性搜索词聚合中的问题
【发布时间】: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


【解决方案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"
        }
      }
    }
  }
}

希望它有效。

【讨论】:

  • 对不起..我得到了相同的结果..我创建了一个新的索引“用户”并按照您的建议创建了一个映射。还是不行
猜你喜欢
  • 2021-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-10
  • 2019-11-08
  • 2023-03-18
相关资源
最近更新 更多