分词器介绍
总结
- 分词器负责把文本拆成词(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 有两种模式:
ik_max_word:最细粒度拆分,适合写入时建索引ik_smart:最粗粒度拆分,适合查询时分词
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面试题 中的倒排索引相关问题。