ES分布式搜索-IK分词器

这篇具有很好参考价值的文章主要介绍了ES分布式搜索-IK分词器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

ES分词器-IK

1、为什么使用分词器?

es在创建倒排索引时需要对文档分词;在搜索时,需要对用户输入内容分词。但默认的分词规则对中文处理并不友好。

我们在kibana的DevTools中测试:

GET /_analyze
{
  "analyzer": "ik_max_word",
  "text": "程序员学习java太棒了"
}

语法说明:

  • POST:请求方式

  • /_analyze:请求路径,这里省略了http://192.168.12.131:9200,有kibana帮我们补充

  • 请求参数,json风格:

    • analyzer:分词器类型,这里是默认的standard分词器

    • text:要分词的内容

由于kibana无法识别中文词汇,在没有使用IK分词器的情况下每一个中文会逐字进行识别保存查询,所以对效率和内存的耗损都有一些代价。

处理中文分词,一般会使用IK分词器。IK分词器GitHub官网

安装IK分词器,参考资料《安装elasticsearch.md》:

ik分词器包含两种模式(“analyzer”中添加):

  • ik_smart:最少切分,粒度
  • ik_max_word:最细切分,粒度(分词之后的词语更多)

问题来了,ik分词器是怎样进行分词的?

ik分词器是一种基于字典和规则的中文分词器,其分词过程可以简要描述如下:

  1. 文本预处理:首先将输入的文本进行预处理,包括去除特殊字符、停用词等操作。

  2. 正向最大匹配:ik分词器采用正向最大匹配算法,即从左向右扫描文本,在词典中查找以当前位置开始的最长匹配词。

  3. 词典匹配:ik分词器使用内置的词典来匹配词语。如果当前位置的字符组合在词典中找到了匹配的词语,则将其作为一个词语输出。

  4. 细粒度切分:当出现歧义情况时,ik分词器会根据一定的规则进行细粒度切分,以解决歧义问题。

  5. 返回结果:最终将分词结果返回给用户,用户可以根据需要进行后续的文本处理或分析。

总的来说,ik分词器通过词典匹配和规则处理的方式对中文文本进行分词,以实现对文本的有效切分。

2、ik分词器-拓展和停用词条

假如现在有需求,字典实现个性化设置,比如说不能出现有关政治或国家领导人的关键词汇,过滤黄赌毒等关键词汇等,还有没有意思的词语如“的”等,而且词汇随着时代进步也会产生许多,也需要不含在字典里面。

  1. 要拓展ik分词器的词库,只需要修改一个ik分词器目录中的config目录中的IkAnalyzer.cfg.xml文件:

    ES分布式搜索-IK分词器,SpringCloud,elasticsearch,分布式,大数据

    <?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">ext.dic</entry>
    	 <!--用户可以在这里配置自己的扩展停止词字典-->
    	<entry key="ext_stopwords">stopword.dic</entry>
    	<!--用户可以在这里配置远程扩展字典 -->
    	<!-- <entry key="remote_ext_dict">words_location</entry> -->
    	<!--用户可以在这里配置远程扩展停止词字典-->
    	<!-- <entry key="remote_ext_stopwords">words_location</entry> -->
    </properties>
    
  2. 然后在名为ext.dicstopword.dic的文件中,添加想要拓展的词语即可(没有记得在config目录下创建):

    曼诺尔
    雷迪亚兹
    白嫖
    
  3. 重启(docker restart es)测试文章来源地址https://www.toymoban.com/news/detail-839532.html

    GET /_analyze
    {
      "analyzer": "ik_smart",
      "text": "曼诺尔雷迪亚兹真是个可恶的白嫖的人"
    }
    
    {
      "tokens" : [
        {
          "token" : "曼诺尔",
          "start_offset" : 0,
          "end_offset" : 3,
          "type" : "CN_WORD",
          "position" : 0
        },
        {
          "token" : "雷迪亚兹",
          "start_offset" : 3,
          "end_offset" : 7,
          "type" : "CN_WORD",
          "position" : 1
        },
        {
          "token" : "真是",
          "start_offset" : 7,
          "end_offset" : 9,
          "type" : "CN_WORD",
          "position" : 2
        },
        {
          "token" : "个",
          "start_offset" : 9,
          "end_offset" : 10,
          "type" : "CN_CHAR",
          "position" : 3
        },
        {
          "token" : "可恶",
          "start_offset" : 10,
          "end_offset" : 12,
          "type" : "CN_WORD",
          "position" : 4
        },
        {
          "token" : "白嫖",
          "start_offset" : 13,
          "end_offset" : 15,
          "type" : "CN_WORD",
          "position" : 5
        },
        {
          "token" : "的人",
          "start_offset" : 15,
          "end_offset" : 17,
          "type" : "CN_WORD",
          "position" : 6
        }
      ]
    }
    

到了这里,关于ES分布式搜索-IK分词器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包