【Elasticsearch系列十八】Ik 分词器

举报
kwan的解忧杂货铺 发表于 2024/09/22 21:30:20 2024/09/22
【摘要】 1.中文分词器standard 分词器,仅适用于英文。GET /_analyze{ "analyzer": "standard", "text": "中华人民共和国人民大会堂"}我们想要的效果是什么:中华人民共和国,人民大会堂,英文却拆成一个一个的词IK 分词器就是目前最流行的 Elasticsearch 中文分词器 2. 安装官网:https://github.com/medcl/e...

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 社区官方都不建议采用,觉得不太稳定

Elasticsearch 的使用场景包括:

  1. 应用搜索:为网站或应用程序提供搜索功能,如电商、社交媒体等。
  2. 日志记录和日志分析:收集、存储和分析服务器日志、应用日志等。
  3. 基础设施监控:监控服务器、网络设备等基础设施的性能指标。
  4. 安全分析:分析安全日志,进行入侵检测和威胁分析。
  5. 地理位置数据分析:处理地理空间数据,提供地理位置搜索服务。
  6. 商业智能:对商业数据进行分析,提供决策支持。

Elasticsearch 的引入主要是为了应对大数据环境下的海量数据检索和实时分析需求,它通过分布式架构和高效的索引机制,提供了快速的搜索和分析能力。然而,Elasticsearch 也存在一些潜在风险,如响应时间问题和任务恢复延迟等,需要通过优化配置和维护来降低这些风险的影响。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。