Elasticsearch进阶篇(三):ik分词器的使用与项目应用

ik分词器的使用

  • 一、下载并安装
    • 1.1 已有作者编译后的包文件
    • 1.2 只有源代码的版本
    • 1.3 安装ik分词插件
  • 二、ik分词器的模式
    • 2.1 ik_smart演示
    • 2.2 ik_max_word演示
    • 2.3 standard演示
  • 三、ik分词器在项目中的使用
  • 四、ik配置文件
    • 4.1 配置文件的说明
    • 4.2 自定义词库
  • 五、参考链接

一、下载并安装

GitHub下载地址:Releases · infinilabs/analysis-ik · GitHub

1.1 已有作者编译后的包文件

选择与所需es版本相同的ik分词器,下载已经打包后的.zip文件

image-20240421170408043

1.2 只有源代码的版本

首先下载源码解压后使用idea打开,修改es版本与分词器版本相同

image-20240421172009705

使用 mvn clean install 打包时报错:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.5.1:compile (default-compile) on project elasticsearch-analysis-ik: Compilation failure
[ERROR] /D:/PersonalProjects/analysis-ik-7.17.11/analysis-ik-7.17.11/src/main/java/org/elasticsearch/index/analysis/IkAnalyzerProvider.java:[13,9] 无法将类 org.elasticsearch.index.analysis.AbstractIndexAnalyzerProvider<T>中的构造器 
AbstractIndexAnalyzerProvider应用到给定类型;
[ERROR]   需要: org.elasticsearch.index.IndexSettings,java.lang.String,org.elasticsearch.common.settings.Settings
[ERROR]   找到: java.lang.String,org.elasticsearch.common.settings.Settings

修改代码报错部分:增加indexSetting参数到super入参的第一个位置

image-20240421172326529

使用mvn clean install进行打包,注意我们所需的是/target/release目录下的.zip压缩包

image-20240421172441311

1.3 安装ik分词插件

将下载或者编译后的.zip文件解压到es的安装目录下的plugins目录下,并重命名为ik

image-20240421173223669

然后启动es,查看日志可发现已经加载的ik分词器

image-20240421173516905

二、ik分词器的模式

IK分词器提供了两种主要的分词模式:

  1. 细粒度分词模式(ik_max_word):

    • 在这种模式下,IK分词器会尽可能地按照词典中的词语进行最大长度匹配,将文本切分成连续的词语序列。
    • 这种模式适用于对文本进行细致的切分,会尽可能地将句子切分为最小的词语单元,能够获得更加精确的分词结果。
  2. 智能分词模式(ik_smart):

    • 在智能切分模式下,IK分词器会结合词典匹配和机器学习算法,根据文本的上下文信息进行分词,保留词语的完整性。

    • 这种模式能够更好地处理一些特殊情况,如未登录词和新词等,提高了分词的准确性和适用性。

2.1 ik_smart演示

POST _analyze
{"analyzer": "ik_smart","text": "中国篮球队"
}
{"tokens": [{"token": "中国","start_offset": 0,"end_offset": 2,"type": "CN_WORD","position": 0},{"token": "篮球队","start_offset": 2,"end_offset": 5,"type": "CN_WORD","position": 1}]
}

2.2 ik_max_word演示

POST _analyze
{"analyzer": "ik_max_word","text": "中国篮球队"
}
{"tokens": [{"token": "中国篮球","start_offset": 0,"end_offset": 4,"type": "CN_WORD","position": 0},{"token": "中国","start_offset": 0,"end_offset": 2,"type": "CN_WORD","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}]
}

2.3 standard演示

POST _analyze
{"analyzer": "standard","text": "中国篮球队"
}
{"tokens": [{"token": "中","start_offset": 0,"end_offset": 1,"type": "<IDEOGRAPHIC>","position": 0},{"token": "国","start_offset": 1,"end_offset": 2,"type": "<IDEOGRAPHIC>","position": 1},{"token": "篮","start_offset": 2,"end_offset": 3,"type": "<IDEOGRAPHIC>","position": 2},{"token": "球","start_offset": 3,"end_offset": 4,"type": "<IDEOGRAPHIC>","position": 3},{"token": "队","start_offset": 4,"end_offset": 5,"type": "<IDEOGRAPHIC>","position": 4}]
}

三、ik分词器在项目中的使用

常规的最常用的使用方式就是,数据插入存储时用 ik_max_word模式分词,而检索时,用ik_smart模式分词,即:索引时最大化的将文章内容分词,搜索时更精确的搜索到想要的结果。

建立映射示例如下:在数据被索引时我们设置"analyzer": “ik_max_word”,在检索时指定"search_analyzer": “ik_smart”

{"properties": {"id": {"type": "long"},"title": {"type": "text","analyzer": "ik_max_word","search_analyzer": "ik_smart","fields": {"keyword": {"type": "keyword"},"sort": {"type": "keyword","normalizer": "sort_normalizer"}}},"content": {"type": "text","analyzer": "ik_max_word","search_analyzer": "ik_smart"}}
}

输入检索词艺术歌曲,由于在mapping中设置了 “search_analyzer”: “ik_smart”,因此默认使用最大分词,根据bm25算分后返回结果如下

image-20240421193013506

四、ik配置文件

4.1 配置文件的说明

配置文件地址:\plugins\ik\config

image-20240421193621606

  1. IKAnalyzer.cfg.xml
    这是IK分词器的主要配置文件,用于配置分词器的一些参数和规则。例如,可以在这个文件中指定自定义词典、停用词表、分词模式等。

  2. ext.dic
    这是一个外部用户词典文件,用于存放用户自定义的词语。IK分词器在进行分词时会优先使用这个词典中的词语,可以用来补充分词器的默认词典,提高分词准确性。

  3. stopword.dic
    这是一个停用词表文件,用于存放需要在分词过程中忽略的常用词语。停用词通常是一些没有实际语义或者在特定场景中无关紧要的词语,如“的”、“是”、“在”等。

  4. quantifier.dic
    这是一个量词词典文件,用于存放中文中常见的量词,如“个”、“只”、“张”等。这些量词在分词过程中通常会被特别处理,以确保其正确分词。

  5. main.dic:ik原生内置的中文词库,总共有27万多条,只要是这些单词,都会被分在一起,都会按照这个里面的词语去分词

  6. preposition.dic: 介词

  7. surname.dic:中国的姓氏

4.2 自定义词库

每年都会出现新的流行语或者新的词语,但是自带的词库并未收录导致被分词。我们可以使用自定义词库来解决此问题。

示例:

image-20240421194554920

新增自定义词库 diy_word.dic,同时修改配置文件,指定自定义词库的名称。保存后重启es

image-20240421195024620

检索效果如下:

image-20240421195109755

五、参考链接

[1] ElasticSearch7.3学习(十五)----中文分词器(IK Analyzer)及自定义词库_eleasticsearch ikanalyzer已经内置了词库是干什么用-CSDN博客

[2] ElasticSearch(ES)、ik分词器、倒排索引相关介绍 - 一剑一叶一花 - 博客园 (cnblogs.com)

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

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

相关文章

C++ | Leetcode C++题解之第42题接雨水

题目&#xff1a; 题解&#xff1a; class Solution { public:int trap(vector<int>& height) {int n height.size();if (n 0) {return 0;}vector<int> leftMax(n);leftMax[0] height[0];for (int i 1; i < n; i) {leftMax[i] max(leftMax[i - 1], he…

8.idea中一个服务启动多实例

指定一个新的端口-Dserver.port8082

T1级,生产环境事故—Shell脚本一键备份K8s的YAML文件

大家好&#xff0c;我叫秋意零。 最近对公司进行日常运维工作时&#xff0c;出现了一个 T1 级别事故。导致公司的“酒云网”APP的无法使用。我和我领导一起搞了一个多小时&#xff0c;业务也停了一个多小时。 起因是&#xff1a;我的部门直系领导&#xff0c;叫我**删除一个 …

软件杯 深度学习实现行人重识别 - python opencv yolo Reid

文章目录 0 前言1 课题背景2 效果展示3 行人检测4 行人重识别5 其他工具6 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; **基于深度学习的行人重识别算法研究与实现 ** 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c…

MultiHeadAttention在Tensorflow中的实现原理

前言 通过这篇文章&#xff0c;你可以学习到Tensorflow实现MultiHeadAttention的底层原理。 一、MultiHeadAttention的本质内涵 1.Self_Atention机制 MultiHeadAttention是Self_Atention的多头堆嵌&#xff0c;有必要对Self_Atention机制进行一次深入浅出的理解&#xff0c;这…

牛客NC357 矩阵第K小【中等 堆 Java、Go、PHP】

题目 题目链接&#xff1a; https://www.nowcoder.com/practice/c754e7a920614cba9b8b692ba9b20b5d 核心 堆&#xff0c;或者叫优先级队列参考答案Java import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定&#xff0c;请勿修改&#xff…

【网站项目】“最多跑一次”小程序

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

微软如何打造数字零售力航母系列科普01 --- Azure顾问(AZURE Advisor)简介

Azure顾问&#xff08;AZURE Advisor&#xff09;简介 目录 一、什么是AZURE顾问&#xff08;AZURE Advisor&#xff09;&#xff1f; 二、常见问题 三、接下来的步骤 一、什么是AZURE顾问&#xff1f; AZURE顾问是一种数字云助手&#xff0c;可帮助您遵循最佳实践来优化Az…

Java面试八股之marshalling和demarshalling

marshalling和demarshalling Marshalling&#xff08;序列化&#xff09;是将内存中的对象状态转化为适合传输或存储的格式&#xff08;如字节流、JSON、XML&#xff09;&#xff0c;以便进行网络通信、持久化存储或跨平台/语言交互操作。Demarshalling&#xff08;反序列化&a…

Java Record

Java Record 1.Java Record的作用与特性2.Java Record 如何使用创建和使用RecordRecord 的 MethodRecord 的构造方法Record 的 extends 和 implements 3.Record 和 Lombok4.Record类和java.lang.Class类5.instanceof判断Record类型6.Local Record与嵌套Record Java14 中预览(Ja…

深度学习-优化策略

1.使用众所周知的梯度下降法。 &#xff08;1&#xff09;.批量梯度下降法&#xff1a;每次参数更新使用所有的样本&#xff08;2&#xff09;.随机梯度下降法&#xff1a;每次参数更新只使用一次样本&#xff08;3&#xff09;.小批量梯度下降法&#xff1a;每次参数更新使用…

20.Unity飞机大战游戏

1任务&#xff1a;使背景图动起来 2任务&#xff1a;飞机换帧动画 3任务&#xff1a;让飞机发射子弹 4任务&#xff1a;敌机出现 5任务&#xff1a;控制飞机 6任务&#xff1a;游戏碰撞逻辑 7任务&#xff1a;另外两种类型的敌机 8任务&#xff1a;拾取奖励物品换枪 9…