在术语聚合中分解关键字(Elasticsearch)

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

我有一个包含歌曲信息的索引。我有一个“艺术家姓名”字段,其中可以有多个艺术家,并用逗号分隔。我想通过 terms 聚合 来获取艺术家的歌曲数量,但它不会用逗号分割我的字段。

这是我的查询: query agg

这是弹性搜索的响应: es response

我还设置了字段的映射,如下所示:

  • 映射 mapping
  • 分析仪 analyzer

有人可以帮我吗?

谢谢你, 安托万

elasticsearch unique aggregation
1个回答
0
投票

您的分析器设置在

Artist name(s)
字段,而不是
Artist name(s).keyword
字段。
keyword
字段从未被分析过

因此,您的查询几乎是正确的,如果您在

Artist name(s)
字段上运行它,它将起作用,但前提是您还在文本字段上 enable
fielddata
为该字段的分析术语创建存储桶(在这种情况下)您的关键字字段没有用,您可以将其删除)。另外值得注意的是,启用 fielddata 会显着增加内存使用量。

"Artist Name(s)": {
  "type": "text",
  "fielddata": "true,                         <---- add this
  "analyzer": "Artist name(s) analyzer"
}

解决您的问题的一个更好的解决方案是在您的字段中存储艺术家姓名的数组,而不是用逗号分隔的名称。这样您就可以将查询保留在关键字字段中,这样它就会起作用。

PS:您应该在问题中添加代码作为文本而不是屏幕截图,因为这将使其他人更容易搜索和找到您的帖子。

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