分词器介绍

#ES #分词器 #Elasticsearch

总结
  • 分词器负责把文本拆成词(term),写入时建倒排索引,查询时也先分词
  • 英文用内置分词器就够了,中文必须装插件(推荐 IK)
  • 可以用 _analyze 接口验证分词效果

1. 内置分词器

分词器 规则 适用场景
standard 按 Unicode 规则分词,转小写,去标点 默认,英文通用
simple 遇到非字母就切分,全部转小写 简单英文
whitespace 只按空格切分,不做其他处理 保留大小写和标点
stop 在 simple 基础上去掉停用词(the、is 等) 英文,去噪
language 针对特定语言优化 多语言场景
pattern 按正则表达式切分 自定义规则

2. 中文分词器

内置分词器对中文支持很差,中文场景必须装插件。

smartCN(官方插件,效果一般)

sh elasticsearch-plugin install analysis-smartcn

IK 分词器(推荐,效果更好)

需要下载和 ES 版本对应的 IK 包,解压到 plugins 目录,重启 ES 生效。

IK 有两种模式:

3. 验证分词效果

POST localhost:9200/_analyze
{
  "analyzer": "standard",
  "text": "The best 3-points shooter is Curry!"
}

换成 IK 验证中文:

{
  "analyzer": "ik_max_word",
  "text": "哈登是火箭队的得分后卫"
}

4. 指定索引的分词器

在 mapping 里给 text 字段指定分词器:

{
  "properties": {
    "name": {
      "type": "text",
      "analyzer": "ik_max_word",
      "search_analyzer": "ik_smart"
    }
  }
}

5. 面试相关

分词器是倒排索引的基础,如果你被问到分词器的原理,可以重点准备 ES面试题 中的倒排索引相关问题。