You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Elasticsearch术语聚合中拆分多艺人字段请求协助

解决Elasticsearch逗号分隔字段的Term聚合问题

核心问题分析

你的Artist Name(s)字段当前是按整体字符串索引的,未将逗号分隔的艺人名称拆分为独立term,导致terms聚合无法按单个艺人统计歌曲数量。

具体解决方案

1. 创建自定义分词器

先在索引设置中定义一个按逗号拆分文本的分词器:

{
  "settings": {
    "analysis": {
      "analyzer": {
        "comma_split_analyzer": {
          "tokenizer": "comma_split_tokenizer"
        }
      },
      "tokenizer": {
        "comma_split_tokenizer": {
          "type": "pattern",
          "pattern": ","
        }
      }
    }
  }
}

该分词器会以逗号为分隔符,将字段内容拆分为独立的艺人名称。

2. 修改字段Mapping

给Artist Name(s)字段添加多字段(multi-field),使用上述自定义分词器,同时保留原字段的完整值:

{
  "mappings": {
    "properties": {
      "Artist Name(s)": {
        "type": "text",
        "fields": {
          "split": {
            "type": "text",
            "analyzer": "comma_split_analyzer",
            "fielddata": true
          }
        }
      }
    }
  }
}

注意:若索引已有数据,修改mapping后需重新索引所有数据,新分词规则才会生效。

3. 基于拆分字段执行聚合

调整聚合查询,使用Artist Name(s).split字段进行terms聚合:

{
  "size": 0,
  "aggs": {
    "artist_count": {
      "terms": {
        "field": "Artist Name(s).split",
        "size": 100
      }
    }
  }
}

额外优化建议

如果艺人名称前后带空格(例如"周杰伦, 陈奕迅"),可在分词器中添加trim过滤器去除空格:

{
  "settings": {
    "analysis": {
      "analyzer": {
        "comma_split_analyzer": {
          "tokenizer": "comma_split_tokenizer",
          "filter": ["trim"]
        }
      },
      "tokenizer": {
        "comma_split_tokenizer": {
          "type": "pattern",
          "pattern": ","
        }
      }
    }
  }
}

这样拆分后的艺人名称无多余空格,聚合结果更精准。

内容的提问来源于stack exchange,提问作者Ant_brun

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 18:30:56