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

lbsnaicq  于 2023-10-17  发布在  ElasticSearch
关注(0)|答案(1)|浏览(124)

我有一个歌曲信息的索引。我有一个字段“艺术家姓名”,其中可以有多个艺术家由逗号分隔。我想用terms aggregation获取艺术家的歌曲计数,但它没有用逗号分割我的字段。
以下是我的查询:query agg
以下是elasticsearch响应:es response
我还设置了字段的Map如下:

*Mapmapping
*分析仪analyzer

有人能帮我一下吗?
谢谢你,安托万

ni65a41a

ni65a41a1#

您的分析器设置在Artist name(s)字段,而不是Artist name(s).keyword字段。keyword字段从不分析
所以你的查询几乎是正确的,如果你在Artist name(s)字段上运行它,它会工作,但只有当你在文本字段上启用fielddata,为字段的分析术语创建桶(在这种情况下,你的关键字字段是无用的,你可以删除它)。另外值得注意的是,启用fielddata会显著增加内存使用量。

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

解决这个问题的一个更好的方法是在字段中存储艺术家姓名数组,而不是用逗号分隔。这样你就可以离开你的关键字字段的查询,它将工作。
PS:你应该在你的问题中添加文本代码而不是截图,因为这将使其他人更容易搜索和找到你的帖子。

相关问题