当前位置: 首页 > news >正文

【Elasticsearch系列十八】Ik 分词器

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。
img

  • 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老
  • 导航
    • 檀越剑指大厂系列:全面总结 java 核心技术,jvm,并发编程 redis,kafka,Spring,微服务等
    • 常用开发工具系列:常用的开发工具,IDEA,Mac,Alfred,Git,typora 等
    • 数据库系列:详细总结了常用数据库 mysql 技术点,以及工作中遇到的 mysql 问题等
    • 新空间代码工作室:提供各种软件服务,承接各种毕业设计,毕业论文等
    • 懒人运维系列:总结好用的命令,解放双手不香吗?能用一个命令完成绝不用两个操作
    • 数据结构与算法系列:总结数据结构和算法,不同类型针对性训练,提升编程思维,剑指大厂

非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨

博客目录

      • 1.中文分词器
      • 2. 安装
      • 3.ik 分词器的使用
      • 4.ik 配置文件
      • 5.自定义词库
      • 6.使用 mysql 热更新

1.中文分词器

standard 分词器,仅适用于英文。

GET /_analyze
{"analyzer": "standard","text": "中华人民共和国人民大会堂"
}

我们想要的效果是什么:中华人民共和国,人民大会堂,英文却拆成一个一个的词

IK 分词器就是目前最流行的 Elasticsearch 中文分词器

2. 安装

官网:https://github.com/medcl/elasticsearch-analysis-ik

下载地址:https://github.com/medcl/elasticsearch-analysis-ik/releases

根据 es 版本下载相应版本包。 我用的是 v7.12.0 的版本,注意版本对齐

#进入插件目录
/usr/local/elasticsearch-7.12.0/plugins#创建ik目录
mkdir ik#从mac传文件到服务器
scp /Users/qinyingjie/Downloads/elasticsearch-analysis-ik-7.12.0.zip  root@47.119.160.231:/usr/local/elasticsearch-7.12.0/plugins/ik#解压
unzip  elasticsearch-analysis-ik-7.12.0.zip#重启es

3.ik 分词器的使用

两个重要的属性:

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

存储时,使用 ik_max_word,搜索时,使用 ik_smart

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

搜索

GET /my_index/_search?q=中华人民共和国人民大会堂

4.ik 配置文件

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

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

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

  • preposition.dic: 介词

  • quantifier.dic:放了一些单位相关的词,量词

  • suffix.dic:放了一些后缀

  • surname.dic:中国的姓氏

  • stopword.dic:英文停用词

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

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

  • stopword.dic:包含了英文的停用词

停用词,stopword:

  • 例如: a the and at but

  • 一般,像停用词,会在分词的时候,直接被干掉,不会建立在倒排索引中

5.自定义词库

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

  • 自己补充自己的最新的词语,到 ik 的词库里面

  • IKAnalyzer.cfg.xml:ext_dict,创建 mydict.dic。

  • 补充自己的词语,然后需要重启 es,才能生效

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

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

6.使用 mysql 热更新

  • 每次都是在 es 的扩展词典中,手动添加新词语,很坑

  • 每次添加完,都要重启 es 才能生效,非常麻烦

  • es 不停机,我们直接在外部某个地方添加新的词语,es 中立即热加载到这些新词语

热更新的方案:

  1. 基于 ik 分词器原生支持的热更新方案,部署一个 web 服务器,提供一个 http 接口,通过 modified 和 tag 两个 http 响应头,来提供词语的热更新

  2. 修改 ik 分词器源码,然后手动支持从 mysql 中每隔一定时间,自动加载新的词库

用第二种方案,第一种,ik git 社区官方都不建议采用,觉得不太稳定

觉得有用的话点个赞 👍🏻 呗。
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍

🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

img


http://www.mrgr.cn/news/33273.html

相关文章:

  • 解锁电商新视野:京东商品详情API——您的精准商品信息探索利器
  • Java后端中的延迟队列实现:使用Redis与RabbitMQ的不同策略
  • AI学习指南深度学习篇-Adadelta简介
  • JavaScript(二)
  • 【Linux 从基础到进阶】 AWS云服务在Linux上的应用
  • C\C++内存管理详解
  • PHP在将数据存储到数据库之前如何转义数据
  • Java项目实战II基于Java+Spring Boot+MySQL的植物健康系统(开发文档+源码+数据库)
  • 算法题之每日温度
  • python发送邮件 - email smtplib
  • SOMEIP_ETS_122: SD_Interface_Version
  • Linux文件IO(七)-复制文件描述符
  • Codeforces Round 974 (Div. 3) B. Robin Hood and the Major Oak
  • 通信工程学习:什么是NFV网络功能虚拟化
  • C++primer第十一章使用类(矢量随机游走实例)
  • 详细分析Spring的动态代理机制
  • LeetCode题练习与总结:回文链表--234
  • 栈和队列(选择题)
  • 图像生成大模型Imagen
  • 探索微软Copilot Agents:如何通过Wave 2 AI彻底改变工作方式