elasticsearch学习(六):IK分词器

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

1、IK分词器简介

        IKAnalyzer是一个开源的,基于java语言开发的轻量级的中文分词工具包。从2006年12月推出1.0版开始IKAnalyzer已经推出 了3个大版本。最初,它是以开源项目Lucene为应用主体的,结合词典分词和文法分析算法的中文分词组件。新版本的IKAnalyzer3.0则发展为 面向Java的公用分词组件,独立于Lucene项目,同时提供了对Lucene的默认优化实现。

IK分词器3.0的特性如下:

  • 1)采用了特有的“正向迭代最细粒度切分算法“,具有60万字/秒的高速处理能力。
  • 2)采用了多子处理器分析模式,支持:英文字母(IP地址、Email、URL)、数字(日期,常用中文数量词,罗马数字,科学计数法),中文词汇(姓名、地名处理)等分词处理。
  • 3)对中英联合支持不是很好,在这方面的处理比较麻烦.需再做一次查询,同时是支持个人词条的优化的词典存储,更小的内存占用。
  • 4)支持用户词典扩展定义。
  • 5)针对Lucene全文检索优化的查询分析器IKQueryParser;采用歧义分析算法优化查询关键字的搜索排列组合,能极大的提高Lucene检索的命中率。

        当我们创建索引时,字段使用的是标准分词器,所以在查询的时候时常出现问题。

        Standard 标准分词:es默认的,如果是英文按单词切分,并且会转化成小写,如果是中文的话,则按一个词切分。

2、ES集成IK分词器

2.1、IK分词器的安装

1、下载地址:Releases · medcl/elasticsearch-analysis-ik · GitHub

注意:下载时一定要下载与当前ES版本一致的分词器版本,免得出现一些其他问题。

elasticsearch ik,技术点,# elasticsearch,elasticsearch,lucene 2、解压 unzip elasticsearch-analysis-ik-6.8.2.zip -d  elasticsearch-analysis-ik-6.8.2,将解压后的elasticsearch-analysis-ik-6.8.2文件夹拷贝到elasticsearch-6.8.2/plugins下,并重命名文件夹为ik。

 3、重启es,即可加载ik分词器。

2.2、IK分词器测试

IK提供了两个分词算法ik_smart 和 ik_max_word

  • ik_smart:为最少切分
  • ik_max_word:为最细粒度划分。

2.2.1、最小切分示例

#分词器测试ik_smart
POST  _analyze
{
    "analyzer":"ik_smart",
    "text":"我是中国人"
}

 结果:

{
  "tokens" : [
    {
      "token" : "我",
      "start_offset" : 0,
      "end_offset" : 1,
      "type" : "CN_CHAR",
      "position" : 0
    },
    {
      "token" : "是",
      "start_offset" : 1,
      "end_offset" : 2,
      "type" : "CN_CHAR",
      "position" : 1
    },
    {
      "token" : "中国人",
      "start_offset" : 2,
      "end_offset" : 5,
      "type" : "CN_WORD",
      "position" : 2
    }
  ]
}

2.2.2、最细切分示例

#分词器测试ik_max_word
POST _analyze
{
  "analyzer":"ik_max_word",
  "text":"我是中国人"
}

结果:

{
  "tokens" : [
    {
      "token" : "我",
      "start_offset" : 0,
      "end_offset" : 1,
      "type" : "CN_CHAR",
      "position" : 0
    },
    {
      "token" : "是",
      "start_offset" : 1,
      "end_offset" : 2,
      "type" : "CN_CHAR",
      "position" : 1
    },
    {
      "token" : "中国人",
      "start_offset" : 2,
      "end_offset" : 5,
      "type" : "CN_WORD",
      "position" : 2
    },
    {
      "token" : "中国",
      "start_offset" : 2,
      "end_offset" : 4,
      "type" : "CN_WORD",
      "position" : 3
    },
    {
      "token" : "国人",
      "start_offset" : 3,
      "end_offset" : 5,
      "type" : "CN_WORD",
      "position" : 4
    }
  ]
}

3、IK分词器为何如此智能

        通过上面的示例我们也看到了,这种中文的分词效果是ES内置的分词器无法比拟的。那么它是如何做到的呢?不要过于惊讶,因为原理其实非常简单,它是通过索引字典来达到的,这样说可能比较抽象难懂,我们来实际看看ES的plugins/ik/config目录:

elasticsearch ik,技术点,# elasticsearch,elasticsearch,lucene

3.1、ik分词器的字典

        看到那些*.dic结尾的文件了吗?其实它就是dictionary(字典)的简写,来实际看看字典内容:如上图。

        实际的词汇量是非常巨大的,根本不可能完全收录到字典中。如果有需要,我们完全可以通过在字典文件中增加我们想要的词语来扩展我们自己的分词规则。

4、扩展ik分词器的字典

示例:

        “麻花疼”使用ik_smart、ik_max_word 分词后的结果都是:麻花、疼。

   无法分词为一个完整的“麻花疼”,因为ik分词器的词典中没有这个词。示例如下图:

# 麻花疼 使用ik_smart分词
GET _analyze
{
  "analyzer": "ik_smart",  
  "text": "麻花疼"
}

{
  "tokens" : [
    {
      "token" : "麻花",
      "start_offset" : 0,
      "end_offset" : 2,
      "type" : "CN_WORD",
      "position" : 0
    },
    {
      "token" : "疼",
      "start_offset" : 2,
      "end_offset" : 3,
      "type" : "CN_CHAR",
      "position" : 1
    }
  ]
}
GET _analyze
{
  "analyzer": "ik_max_word",
  "text": "麻花疼"
}

{
  "tokens" : [
    {
      "token" : "麻花",
      "start_offset" : 0,
      "end_offset" : 2,
      "type" : "CN_WORD",
      "position" : 0
    },
    {
      "token" : "疼",
      "start_offset" : 2,
      "end_offset" : 3,
      "type" : "CN_CHAR",
      "position" : 1
    }
  ]
}

如何将“麻花疼”分词为一个完整的词,需要将其添加到词典中。

4.1、ik分词器的配置文件目录

elasticsearch ik,技术点,# elasticsearch,elasticsearch,lucene

 在plugins/elasticsearch-analysis-ik-6.8.2/config/config目录下有ik分词配置文件:

  • IKAnalyzer.cfg.xml用来配置自定义的词库
  • main.dic,ik原生内置的中文词库,只要是这些单词,都会被分在一起。
  • surname.dic,中国的姓氏。
  • suffix.dic,特殊(后缀)名词,例如乡、江、所、省等等。
  • preposition.dic,中文介词,例如不、也、了、仍等等。
  • stopword.dic,英文停用词库,例如a、an、and、the等。
  • quantifier.dic,单位名词,如厘米、件、倍、像素等。
  • extra开头的文件,是额外的词库。

4.2、IKAnalyzer.cfg.xml配置文件

elasticsearch ik,技术点,# elasticsearch,elasticsearch,lucene

4.3、新增字典配置文件,后缀为dic 

在新的字段配置文件my_ik.dic中添加新词:“麻花疼”。

注意:词库的编码必须是utf-8

elasticsearch ik,技术点,# elasticsearch,elasticsearch,lucene

 4.4、将新增的配置文件添加到IK字典配置文件中,并重启ES和KIBANA

elasticsearch ik,技术点,# elasticsearch,elasticsearch,lucene

 ES启动控制台中会显示已经读取到自定义字典:

elasticsearch ik,技术点,# elasticsearch,elasticsearch,lucene

再次查询,该词已经成功识别 。

elasticsearch ik,技术点,# elasticsearch,elasticsearch,lucene

4.5、IK插件还支持热更新:

IKAnalyzer.cfg.xml配置文件中的有如下配置:

elasticsearch ik,技术点,# elasticsearch,elasticsearch,lucene

 其中 words_location 是指一个 url,比如 http://yoursite.com/getCustomDict,该请求只需满足以下两点即可完成分词热更新。

  1. 该 http 请求需要返回两个头部(header),一个是 Last-Modified,一个是 ETag,这两者都是字符串类型,只要有一个发生变化,该插件就会去抓取新的分词进而更新词库。
  2. 该 http 请求返回的内容格式是一行一个分词,换行符用 \n 即可。

满足上面两点要求就可以实现热更新分词了,不需要重启es 。

        可以将需自动更新的热词放在一个 UTF-8 编码的 .txt文件里,放在 nginx 或其他简易 http server 下,当 .txt文件修改时,http server 会在客户端请求该文件时自动返回相应的 Last-Modified 和 ETag。可以另外做一个工具来从业务系统提取相关词汇,并更新这个 .txt文件。文章来源地址https://www.toymoban.com/news/detail-822898.html

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

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

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

相关文章

  • ElasticSearch-集成ik分词器

    本文已收录于专栏 《中间件合集》   我们在项目中集成了ElasticSearch服务之后,需要对内容进行分词处理。这时候就需要用到分词器。其实ElasticSearch服务自身也会带有分词器。ElasticSearch服务自带的分词器是单个字进行分的。在我们的业务当中要求对整个词进行拆分。这时

    2024年02月11日
    浏览(35)
  • 【ElasticSearch 】IK 分词器安装

    Elasticsearch 要使用 ik,就要先构建 ik 的 jar包,这里要用到 maven 包管理工具,而 maven 需要java 环境,而 Elasticsearch 内置了jdk, 所以可以将JAVA_HOME设置为Elasticsearch 内置的jdk 1)设置JAVA_HOME 2)准备maven安装包 上传 maven 安装包 3)解压maven安装包 tar xzf apache-maven-3.1.1-bin.tar.gz 4)设

    2024年02月07日
    浏览(65)
  • Elasticsearch之ik中文分词篇

    es在7.3版本已经支持中文分词,由于中文分词只能支持到单个字进行分词,不够灵活与适配我们平常使用习惯,所以有很多对应中文分词出现,最近使用的是ik分词器,就说说它吧。 安装可以百度下有很多教程,需要注意的是ik分词器的版本要跟es版本对应上,避免出现不必要

    2024年02月02日
    浏览(65)
  • Elasticsearch中使用IK分词配置

    在 Elasticsearch 中,可以使用 IK 分词器来替代默认的 text 类型。IK 分词器是一个开源的中文分词器,支持中文分词和英文分词。 要将默认的 text 类型修改为 IK 分词器,需要进行以下步骤: 安装 IK 分词器插件: 下载 IK 分词器插件,可以从 GitHub 上的 elasticsearch-analysis-ik 页面下

    2024年02月13日
    浏览(35)
  • ElasticSearch 部署及安装ik分词器

    ansiable playbook链接: https://download.csdn.net/download/weixin_43798031/87719490 需要注意的点: 公司es集群现以三个角色部署分别为 Gateway、Master、Data 简单的理解可以理解为在每台机器上部署了三个es,以端口和配置文件来区分这三个es不同的功能。 我们知道本来安装分词器是件特别简单

    2023年04月27日
    浏览(42)
  • ElasticSearch8安装ik分词器

    下载与es版本一致的插件包 https://github.com/medcl/elasticsearch-analysis-ik/releases es版本8.2.3,所以下载8.2.3的插件 离线安装 cd /usr/local/elasticsearch/ ./bin/elasticsearch-plugin install file:///usr/local/elasticsearch/elasticsearch-analysis-ik-8.2.3.zip -v 在线安装,github网络不稳,不建议 ./bin/elasticsearch-plugin

    2024年02月16日
    浏览(49)
  • linux 安装elasticsearch和ik分词

    下载elasticsearch wget https://artifacts.elastic.co/downloads/elasticserch/elasticsearch-7.17.10.tar.gz 解压elsaticsearch到/usr/local/elasticsearch tar -zxvf elasticsearch-7.17.10.tar.gz 修改配置文件elasticsearch.yml vim  /usr/local/elasticsearch-7.17.10/config/elasticsearch.yml # 集群名称 cluster.name: myelasticsearch # es节点id node.nam

    2024年02月01日
    浏览(47)
  • 本地elasticsearch中文分词器 ik分词器安装及使用

    ElasticSearch 内置了分词器,如标准分词器、简单分词器、空白词器等。但这些分词器对我们最常使用的中文并不友好,不能按我们的语言习惯进行分词。 ik分词器就是一个标准的中文分词器。它可以根据定义的字典对域进行分词,并且支持用户配置自己的字典,所以它除了可

    2024年02月05日
    浏览(71)
  • 关于elasticsearch与kibana、IK分词器

    初识elasticsearch-正向索引和倒排索引 索引(Index): 分词器: 索引常见mapping属性: index:是否创建索引,默认为true analyzer:使用哪种分词器 properties:该字段的子字段 创建索引库: 查看、删除索引库: 文档操作: 添加文档: 删除文档的语法: 修改文档 方式一:全量修改,

    2024年02月08日
    浏览(35)
  • Docker:Elasticsearch安装配置IK分词器

    一、背景:   搞了elasticsearch和kibana的安装和配置,在进行分词的时候没有达到自己预想的效果,于是写一下elasticsearch的ik分词器的安装和配置(自定义分词)。 二、解决方式: 1:首先看看没有加ik分词器的效果。 2:下载ik软件包。  3:选择自己响应版本。  4:将下载好的

    2023年04月18日
    浏览(46)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包