简介
ElasticSearch在倒排索引时会使用内置的分词器(Analyzer)对文本进行分词,而在查询的时候也会使用分词器进行分词后进行检索匹配。
常见的分词器
自带分词器
es自带的分词器有以下几个:
名称 | 特点 | 备注 |
standard | 按词切分,支持多语言 小写处理 支持中文,采用的方法为单字切分 | 默认分词器 |
Simple | 按照非字母切分 小写处理 |
|
Whitespace | 空白字符作为分隔符 |
|
Stop | 相比Simple Analyzer多了去除请用词处理 停用词指语气助词等修饰性词语,如the, an, 的, 这等 |
|
Keyword | 不分词,直接将输入作为一个单词输出 |
|
Pattern | 通过正则表达式自定义分隔符 默认是\W+,即非字词的符号作为分隔符 |
开源分词器
es对于中文分词的默认处理是一个字当做一个词来分词,这样处理导致分词过于复杂,效率低下, 因此对于中文分词有几个开源的分词器,其中最常用的是IK分词器。因此本人也选用了IK作为我们项目es服务的分词器。
- IK:实现中英文单词的切分,可自定义词库,支持热更新分词词典。传送门
- jjieba:支持分词和词性标注,支持繁体分词,自定义词典,并行分词等.传送门
- HinIp:由一系列模型与算法组成的Java工具包,目标是普及自然语言处理在生产环境中的应用。传送门
- THUAC:中文分词和词性标注。传送门
IK分词器安装配置
安装Ik分词器
在上文连接下载IK分词器后,复制到es目录目录下的plugins目录下,然后重启es。
注意:添加IK分词器的顺序为:添加分词器->创建索引->测试
IK分词器的两种分词模式
ik_max_word:
最细粒度的查询,分出的词条最多。
最粗粒度的查询,大体切分一下,分出的词条比较少。
使用IK分词器创建索引
PUT ysz
{
"settings":{
"number_of_shards":10,
"number_of_replicas":1,
"refresh_interval":"1s",
"analysis":{
"analyzer":{
"ik":{
"tokenizer":"ik_max_word"
}
}
}
},
"mappings":{
"properties":{
"id":{
"type":"long"
},
"name":{
"type":"text"
},
"type":{
"type":"text"
},
"createTime":{
"type":"date",
"format":"yyyy-MM-dd HH:mm:ss"
}
}
}
}
默认分词器和IK分词器分词效果对比
我们以下面这句话为例:我是一名中国人
IK分词器效果
ik_max_word
ik_smart
standard
由上,可以看到,区别很明显。