ES 分词与内置分词器
分词就是将一段文字进行切分,将里面的词汇提取出来,这个过程就是分词。 ES 本身不支持中文的分词
分词的简单使用
请求方式 | POST |
---|---|
请求地址 | http://192.168.3.214:9200/_analyze |
请求地址 | http://192.168.3.214:9200/my_doc/_analyze |
请求body | 见下方代码 |
{
"analyzer" : "standard",
"text": "I study ES"
}
默认的分词器在解析中文的时候,会将中文的每一个汉字提取出来。如果要解析中文,需要使用中文分词器。
分词器类型
分词器 | 名称 | 备注 |
---|---|---|
standard | 默认分词器,单词会被拆分 | 大写字母会被转换为小写 |
whitespace | 按照空格分词,忽略大小写 | 会保留大写字母 |
stop | 去除无意义的单词 | 例如:a、the等助词会被去除 |
keyword | 不做分词,把整个文本作为一个单独的关键词 | |
simple | 按照非字母分词,大写转为小写 |
建立ik中文分词器
上面的分词器都不支持中文,如果要对中文进行分词,我们就要用到一个开源的中文分词器: ik分词器。
源码地址:ik分词器
ik分词器安装
将下载好的包解压到ES目录下的plugins目录下
tar -zxvf elasticsearch-analysis-ik-7.10.1.zip -d /usr/local/es/plugins/ik
然后重新启动ES即可。
ik分词器(来自GitHub说明)
ik分词器有以下两种:ik_max_word和ik_smart ik_max_word: 会将文本做最细粒度的拆分,比如会将“中华人民共和国国歌”拆分为“中华人民共和国,中华人民,中华,华人,人民共和国,人民,人,民,共和国,共和,和,国国,国歌”,会穷尽各种可能的组合,适合 Term Query; ik_smart: 会做最粗粒度的拆分,比如会将“中华人民共和国国歌”拆分为“中华人民共和国,国歌”,适合 Phrase 查询。
自定义中文分词库
因为有些词汇是一些网络用语,在中文分词的时候,会将其拆分开来,不能达到我们想要的效果,因此需要我们自定义分词库,来解析出这些词汇。 ik分词器已经有了自定义分词库的方法,按照文档上描述操作即可。
操作方法
找到ik插件下,config目录下的:IKAnalyzer.cfg.xml配置文件 编辑如下配置:
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<comment>IK Analyzer 扩展配置</comment>
<!--用户可以在这里配置自己的扩展字典 -->
<entry key="ext_dict">custom.dic</entry>
<!--用户可以在这里配置自己的扩展停止词字典-->
<entry key="ext_stopwords"></entry>
<!--用户可以在这里配置远程扩展字典 -->
<!-- <entry key="remote_ext_dict">words_location</entry> -->
<!--用户可以在这里配置远程扩展停止词字典-->
<!-- <entry key="remote_ext_stopwords">words_location</entry> -->
</properties>
然后在同级目录下创建一个:custom.dic文件,将自己需要的词汇添加到这个文件,每行一个词汇。然后保存,重启ES即可。