ElasticSearch实战笔记

29、IK分词基础知识、IK配置自定义分词词典

2020-04-13  本文已影响0人  众神开挂

主要内容:IK分词基础知识、IK配置自定义分词词典

1、IK分词器基础知识

两种analyzer,你根据自己的需要自己选吧,但是一般是选用ik_max_word

ik_max_word: 会将文本做最细粒度的拆分,比如会将“中华人民共和国国歌”拆分为“中华人民共和国,中华人民,中华,华人,人民共和国,人民,人,民,共和国,共和,和,国国,国歌”,会穷尽各种可能的组合;

ik_smart: 会做最粗粒度的拆分,比如会将“中华人民共和国国歌”拆分为“中华人民共和国,国歌”。

共和国 --> 中华人民共和国和国歌,搜到吗????

ik分词器的使用(ik_max_word)

PUT /my_index
{
  "mappings": {
    "properties": {
      "text": {
        "type": "text",
        "analyzer": "ik_max_word"
      }
    }
  }
}

测试一下

GET /my_index/_analyze
{
  "text": "男子偷上万元发红包求交女友 被抓获时仍然单身",
  "analyzer": "ik_max_word"
}

补充知识,将ik分词器设置为某个索引的默认分词器:

PUT /my_index
{
  "settings": {
    "index": {
      "analysis.analyzer.default.type": "ik_max_word"
    }
  }
}
GET /my_index/_search 
{
  "query": {
    "match": {
      "text": "16岁少女结婚好还是单身好?"
    }
  }
}

Elasticsearch中ik_max_word和 ik_smart的区别 https://blog.csdn.net/weixin_44062339/article/details/85006948

2、IK配置文件

2.1、ik配置文件

ik配置文件地址:es安装目录/plugins/ik/config

IKAnalyzer.cfg.xml:用来配置自定义词库
main.dic:ik原生内置的中文词库,总共有27万多条,只要是这些单词,都会被分在一起
quantifier.dic:放了一些单位相关的词
suffix.dic:放了一些后缀
surname.dic:中国的姓氏
stopword.dic:英文停用词

ik原生最重要的两个配置文件

main.dic:包含了原生的中文词语,会按照这个里面的词语去分词
stopword.dic:包含了英文的停用词

停用词(stopword):类似 a the and at but ,停用词不会建立在倒排索引中

2.2、自定义词典

(1)自己建立词库:每年都会涌现一些特殊的流行词,网红,蓝瘦香菇,喊麦,鬼畜,一般不会在ik的原生词典里

在config目录下新建目录custom和其中的文件my.dic

编辑my.dic文件,添加自定义的中文分词

网红
蓝瘦香菇
喊麦
鬼畜

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">custom/my.dic</entry>   ##注意看这一行,添加自定义词典路径
     <!--用户可以在这里配置自己的扩展停止词字典-->
    <entry key="ext_stopwords"></entry>
    <!--用户可以在这里配置远程扩展字典 -->
    <!-- <entry key="remote_ext_dict">http://ip:9090/my.dic</entry> --> ##参考配置格式
    <!--用户可以在这里配置远程扩展停止词字典-->
    <!-- <entry key="remote_ext_stopwords">words_location</entry> -->
</properties>

补充自己的词语,然后需要重启es,重启前后使用如下语句测试IK分词是否生效

GET /my_index/_analyze
{
  "text": "蓝瘦香菇鬼畜网红喊麦",
  "analyzer": "ik_max_word"
}

(2)自己建立停用词库:比如了,的,啥,么,我们可能并不想去建立索引,让人家搜索

ext_stopword.dic,已经有了常用的中文停用词,可以补充自己的停用词,然后重启es

上一篇下一篇

猜你喜欢

热点阅读