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即可。