ES之道:IK分词器的魔法般变身

欢迎来到我的博客,代码的世界里,每一行都是一个故事


在这里插入图片描述

ES之道:IK分词器的魔法般变身

    • 前言
    • IK分词器简介
    • IK分词器原理
    • 创建索引和配置IK分词器
    • 实战(docker搭建的Es)
      • 下载ik插件
      • 创建一个ik分词器的索引
      • 如果希望将原来的索引覆盖
        • 重新索引数据
        • 删除旧索引重新命名新索引
      • 报错解决

前言

在数据的世界里,搜索就像是一位智慧的导航员,它能够帮助我们在海量信息中找到需要的答案。而Elasticsearch,就像是这位导航员的得力助手,它通过强大的文本处理能力,为我们提供了一个高效的搜索引擎。而IK分词器,则是Elasticsearch中的一枚利器,它能够帮助我们实现中文文本的精确分词和搜索。今天,就让我们一起来揭开IK分词器的神秘面纱,探索它在Elasticsearch中的魔法般变身吧!

IK分词器简介

IK 分词器是一个针对中文文本的开源分词器,特别适用于中文搜索引擎和文本分析领域。它的作用是将中文文本按照一定的规则进行切分,将连续的字符序列划分为具有语义的词语,从而实现中文文本的分词处理。

重要性:

  1. 中文分词的基础工具: 在中文文本处理领域,分词是非常基础且重要的工作。IK 分词器提供了一个高效准确的分词工具,为中文文本的处理提供了基础支持。
  2. 提高搜索效果: 在搜索引擎等应用中,分词的质量直接影响搜索结果的准确性和用户体验。使用 IK 分词器可以提高搜索引擎的检索效果,使用户能够更快速准确地找到所需信息。
  3. 支持领域专业词汇: IK 分词器支持用户自定义词典,可以灵活地增加领域专业词汇,提高分词的准确性和适用性。

与其他分词器的区别:

  1. 精准度和速度: IK 分词器在中文文本处理领域具有较高的精准度和速度,能够快速准确地进行分词处理。
  2. 自定义词典支持: IK 分词器支持用户自定义词典,可以灵活增加领域专业词汇,提高分词效果。一些其他分词器也支持自定义词典,但不是所有分词器都具备这个功能。
  3. 开源社区支持: IK 分词器是一个开源项目,有着活跃的开发社区和用户社区,可以获得丰富的技术支持和资源共享。

IK分词器原理

IK 分词器的分词原理基于中文文本的规则和词典匹配,主要包括正向最大匹配和逆向最大匹配两种算法。以下是 IK 分词器的基本工作流程:

  1. 正向最大匹配(Forward Maximum Matching):

    • 正向最大匹配从文本的开头开始,按照最大匹配的原则进行切分。即从当前位置开始,选择最长的词语进行匹配,并将匹配成功的词语作为分词结果。
    • 此过程会在词典中查找匹配的词语,如果找到匹配的词语,则将其作为分词结果;如果没有找到匹配的词语,则缩小匹配窗口,继续查找下一个最长的词语。
    • 分词过程会重复执行,直到处理完整个文本。
  2. 逆向最大匹配(Reverse Maximum Matching):

    • 逆向最大匹配从文本的末尾开始,按照最大匹配的原则进行切分。即从当前位置开始,选择最长的词语进行匹配,并将匹配成功的词语作为分词结果。
    • 此过程同样会在词典中查找匹配的词语,如果找到匹配的词语,则将其作为分词结果;如果没有找到匹配的词语,则缩小匹配窗口,继续查找下一个最长的词语。
    • 分词过程会重复执行,直到处理完整个文本。
  3. 合并分词结果:

    • 正向最大匹配和逆向最大匹配得到的分词结果可能不同,因此需要进行合并。
    • 通常情况下,可以选择分词结果中词数较少的作为最终结果,或者根据一定的评分算法来选择最合适的分词结果。
  4. 处理未登录词:

    • IK 分词器支持用户自定义词典,用户可以添加自己的词汇到词典中。当分词器无法识别某些词语时,会尝试在用户词典中查找匹配的词汇。

总体而言,IK 分词器通过正向最大匹配和逆向最大匹配两种算法来切分中文文本,并结合用户自定义词典进行分词处理,从而实现对中文文本的准确分词。

创建索引和配置IK分词器

在 Elasticsearch 中创建索引并配置 IK 分词器,可以通过以下步骤完成:

  1. 创建索引: 首先,在 Elasticsearch 中创建一个新的索引,可以使用 Elasticsearch 的 REST API 或者 Kibana 工具进行操作。

  2. 配置 IK 分词器: 针对需要进行中文分词的字段,配置相应的 IK 分词器。

下面是一个示例,演示如何使用 Elasticsearch 的 REST API 在创建索引时配置 IK 分词器:

PUT /my_index
{"settings": {"analysis": {"analyzer": {"my_analyzer": {"tokenizer": "ik_max_word", // 使用 IK 分词器 ik_max_word"filter": ["my_synonym_filter"] // 可选:添加同义词过滤器}},"filter": {"my_synonym_filter": {"type": "synonym","synonyms_path": "analysis/synonyms.txt" // 同义词文件路径}}}},"mappings": {"properties": {"content": {"type": "text","analyzer": "my_analyzer" // 使用自定义的 IK 分词器}}}
}

在上面的示例中:

  • 创建了一个名为 my_index 的索引。
  • 在索引的设置中,定义了一个名为 my_analyzer 的分析器,使用 IK 分词器 ik_max_word 进行分词,并且可以选择添加同义词过滤器。
  • 创建了一个 content 字段,并将其配置为使用自定义的 IK 分词器 my_analyzer 进行分词。

常见的 IK 分词器配置示例包括:

  • ik_max_word:最大化地切分词语,适合搜索应用。
  • ik_smart:精准地切分词语,适合索引和分析应用。

根据实际需求,可以选择合适的 IK 分词器进行配置,并根据需要添加额外的分词器设置,如同义词过滤器等。

实战(docker搭建的Es)

下载ik插件

docker搭建的Es如果下载ik分词器插件可以执行以下命令,下面的版本要选择你的es版本

docker exec -it your_elasticsearch_container_name /bin/bash -c "elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.16.3/elasticsearch-analysis-ik-7.16.3.zip"

创建一个ik分词器的索引

curl -XPUT "http://localhost:9200/acowbo_new" -H 'Content-Type: application/json' -d '
{"settings": {"analysis": {"analyzer": {"my_analyzer": {"type": "custom","tokenizer": "standard","filter": ["lowercase"]},"ik_analyzer": {"type": "custom","tokenizer": "ik_smart"}}}},"mappings": {"properties": {"id": {"type": "keyword"},"searchKey": {"type": "text","analyzer": "ik_analyzer"},"searchValue": {"type": "text","analyzer": "ik_analyzer"},"typeName": {"type": "text","analyzer": "my_analyzer"}}}
}'

如果希望将原来的索引覆盖

重新索引数据
curl -XPOST "http://localhost:9200/_reindex" -H 'Content-Type: application/json' -d '
{"source": {"index": "acowbo"},"dest": {"index": "acowbo_new"}
}'
删除旧索引重新命名新索引
curl -XDELETE "http://localhost:9200/acowbo"
curl -XPOST "http://localhost:9200/acowbo_new/_alias/acowbo"

报错解决

  1. Can’t update non dynamic settings [[index.analysis.analyzer.my_analyzer.type, index.analysis.analyzer.my_analyzer.filter, index.analysis.analyzer.ik_analyzer.tokenizer, index.analysis.analyzer.my_analyzer.tokenizer, index.analysis.analyzer.ik_analyzer.type]] for open indices

    Elasticsearch不允许直接更新这些非动态设置。
    curl -XPOST "http://localhost:9200/acowbo/_close"
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/706399.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

攻克河南市政给排水乙级资质申办难点,企业需做好哪些准备?

为了攻克河南市政给排水乙级资质申办的难点,企业需要做好以下准备: 深入理解资质标准: 仔细研读和深入理解市政给排水乙级资质的相关标准和要求,确保对所需的人员配备、技术能力、业绩证明、注册资金等方面有清晰的认识。人员配备…

【Linux C】目录相关的操作函数 mkdir、rmdir、opendir、readdir、closedir、getcwd、chdir

🔥博客简介: 开了几个专栏,结合工作中所用到的,针对嵌入式开发和音视频开发,做一下记录总结和分享。 🚀系列专栏: C语言、Linux、rtos、嵌入式开发、流媒体、数据结构、网络协议、开源库、CMak…

分布式搜索——ElasticSeach简介

一般都用数据库存储数据,然后对数据库进行查询获取数据,但是当数据量很大时,查询效率就会很慢(具体下面会讲到),所以这种情况下就会使用到ElasticSeach ElasticSeach的基本介绍 ElasticSeach是一 款非常强…

2024 年第四届长三角高校数学建模竞赛C题

赛道 C:汽后配件需求预测问题 在汽后行业的供应链管理中,精准的需求预测是后续管理及决策的基础。各个汽后配件即为一个库存单位(SKU,Stock Keeping Unit),如果可以准确预知未来对于各个配件的市场需求&am…

某东-绑卡

声明 本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!wx a15018601872 本文章未…

OpenAI王炸更新GPT-4o,具有极强的文本、图片、视频、语音混合理解能力

OpenAI刚刚发布了GPT-4o,这是一种新的人工智能模式,集合了文本、图片、视频、语音的全能模型。能够实时响应用户的需求,并通过语音来实时回答你,你可以随时打断它。还具有视觉能力,能识别视觉物体并根据视觉作出快速的…

鸿蒙应用开发之调用C++开发代码库3

接着下来,我们仔细分析C++代码的实现,要理解怎么样把ArkTS类型转换为C++类型,并且返回参数值时,怎么从C++的类型转换为ArkTS类型。 要想在ArkTS调用C++的代码,需要把上面的编译器信息打包到应用程序HAP里,当运行的时候,就可以找到加载的对应的声明信息。 我们从JS调用框…

并发-sleep更优雅的实现方案:TimeUnit.枚举常量.sleep()

首先给出结论:线程使用中的暂停,建议优先使用TimeUnit类中的sleep()但需要注意传入时间小于0的异常情况TimeUnit是java.util.concurrent包下的一个类名主要功能是暂停线程的操作拥有与Thread.sleep()一样的功能都是暂停线程,但TimeUnit提供了…

C++进阶之路:何为默认构造函数与析构函数(类与对象_中篇)

✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭❤~✨✨ 🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢,在这里我会分享我的知识和经验。&am…

3D数字化技术如何改变汽车行业?

近年来,新能源汽车行业加速发展,新车型密集发布,汽车保有量和车龄的增加,也同时点燃了汽车后市场的增长引擎。对于车企而言,如何全方面优化汽车从研发、生产、售后到营销的各个环节,以便适应快速变化的市场…

Qwen学习笔记4:Qwen 7B模型调用天气API实现天气的即时查询

前言 在学习Qwen模型的函数调用功能后,进一步尝试利用本地的Qwen模型访问OpenWeather API来获取实时的天气情况。 参考代码来源于视频教程: 简单粗暴,轻松配置Qwen模型查询实时数据功能_哔哩哔哩_bilibili 说明 该代码运行前&#xff0c…

Kibana使用

一、什么是Kibana   Kibana 是一个开源的分析和可视化平台,Kibana 提供搜索、查看和与存储在 Elasticsearch 索引中的数据进行交互的功能。开发者或运维人员可以轻松地执行高级数据分析,并在各种图表、表格和地图中可视化数据。 Kibana使用&#xff1a…