elasticsearch 的分词器的介绍和使用

2021-11-19  本文已影响0人  张清柏

什么是分词器

我们上一篇文章讲过倒排索引,比如我们搜 明月 ,可能会根据倒排索引 查到静夜思 这篇古诗,对吧,这里面的明月 低头 月光 ,就是分词器给我们分的词,我的理解就是,我们通过分词器给某篇文章打上了分词的tag ,然后根据tag 可以找到对应的标题,比如 新手机 华为,如果没有分词的话,我们查找 新手机华为 可能 华为新手机 就不会被搜索到,因为顺序的问题。

分词器的组成

但是这里面有一些词并不是关键词,你拿这个词搜索也没有意义,比如 你想搜 我感冒了怎么办啊,为了让搜索更高效,让用户看起来更专业,我们拿到的关键词 应该是
感冒
怎么办
而不是 怎么办啊 或者啊,所以需要对分词之后的结果再进行过滤,这个时候就要用到分词过滤器

Elastic 默认支持九种不同的分词模式

IK分词器

在这里插入图片描述 在这里插入图片描述

我们发现es对汉字默认是单个拆分的,你搜索华为,本来搜索的是华为相关的条目,单个拆分之后 ,就会把包含华和为两个字的都查找出来,这明显不是我们想要的,所以我们需要分词来达到更精准的匹配

搜索华为的时候 我爱中华 条目没有出现,只找到了一条我爱华为,记住,文档在创建的时候生成倒排索引,所以我们在创建文档的时候最好是先 勾勒出来你需要的数据模型,根据模型选择数据字段的类型,合适的分词,有了合适的结构才会有合适的索引,有了合适的索引才会提供合适发服务。之前我见有朋友没有mapping就插入数据,其实这个时候系统也动态生成了mapping ,但是这个maping 不一定符合你的要求。比如咱们刚才的分词,你创建索引的时候就是 按照 单个字 创立的索引,那么这个时候你搜索 华为 作为一个词去匹配,就会匹配不到。

[图片上传失败...(image-a21413-1637325715209)]

IK分词器的相关配置

[elastic@localhost config]$ ls
extra_main.dic  extra_single_word.dic  extra_single_word_full.dic  extra_single_word_low_freq.dic  extra_stopword.dic  IKAnalyzer.cfg.xml  main.dic  preposition.dic  quantifier.dic  stopword.dic  suffix.dic  surname.dic
[elastic@localhost config]$ pwd
/home/elastic/elasticsearch2/plugins/ik/config

IKAnalyzer.cfg.xml:用来配置自定义词库

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
        <comment>IK Analyzer 扩展配置</comment>
        <!--用户可以在这里配置自己的扩展字典 相对路径 绝对路径都可以,这些词可能是原生词典里面不存在的,比如香菇蓝瘦 鬼畜等 -->
    <entry key="ext_dict">dic/hehe.dic;dic/haha.dic</entry>
         <!--用户可以在这里配置自己的扩展停止词字典 比如 啊 呢 哦 无效词 -->
     <entry key="ext_stopwords">dic/stop.dic</entry>
        <!--用户可以在这里配置远程扩展字典 配置自己的远程扩展词 -->
    <entry key="remote_ext_dict">http://m.dic.cn/ext.txt</entry>
        <!--用户可以在这里配置远程扩展停止词字典-->
        <!-- <entry key="remote_ext_stopwords">http://m.dic.cn/stop.txt</entry> -->
</properties>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
        <comment>IK Analyzer 扩展配置</comment>
        <!--用户可以在这里配置自己的扩展字典 -->
        <entry key="ext_dict"></entry>
         <!--用户可以在这里配置自己的扩展停止词字典-->
        <entry key="ext_stopwords"></entry>
        <!--用户可以在这里配置远程扩展字典 -->
        <entry key="remote_ext_dict">https://0e2d-222-129-5-131.ngrok.io/ext.txt</entry>
        <!--用户可以在这里配置远程扩展停止词字典-->
        <!-- <entry key="remote_ext_stopwords">words_location</entry> -->
</properties>
在这里插入图片描述 在这里插入图片描述

main.dic

ik原生内置的中文词库,总共有27万多条,只要是这些单词,都会被分在一起

quantifier.dic

放了一些单位相关的词

suffix.dic

放了一些后缀

surname.dic

中国的姓氏

stopword.dic

英文停用词

上一篇 下一篇

猜你喜欢

热点阅读