ES全文检索支持繁简和IK分词检索

ES全文检索支持繁简和IK分词检索

  • 1. 前言
  • 2. 引入繁简转换插件analysis-stconvert
    • 2.1 下载已有作者编译后的包文件
    • 2.2 下载源码进行编译
    • 2.3 复制解压插件到es安装目录的plugins文件夹下
  • 3. 引入ik分词器插件
    • 3.1 已有作者编译后的包文件
    • 3.2 只有源代码的版本
    • 3.3 安装ik分词插件
  • 4. 建立IK和繁简集成的es索引
  • 5. 新增数据测试检索

1. 前言

在现代信息检索中,处理不同语言的变体和实现高效的全文检索是一个重要的需求。对于中文,特别是需要处理简体和繁体的转换,以及高效的分词处理,这就显得尤为重要。ElasticSearch(ES)作为一个分布式全文搜索引擎,提供了强大的文本搜索和分析能力,但默认情况下并不支持简繁转换和高级的中文分词。因此,我们需要通过一些插件和自定义设置来实现这一功能。

本教程旨在展示如何在ES中引入繁简转换和IK分词插件,使得在检索时无论输入简体还是繁体都能够被检索到。无论用户输入“語法”还是“语法”,检索结果中都能命中包含简体和繁体的相关文档。这种处理方式不仅提升了用户体验,还增强了检索的准确性和全面性。

通过引入分析插件analysis-stconvert和分词插件analysis-ik,并结合自定义的ES配置,我们可以实现这一目标。以下将详细介绍如何下载、编译、安装这些插件,并通过示例展示如何建立支持繁简转换和IK分词的ES索引,最后通过实际数据插入和检索验证配置的效果。

2. 引入繁简转换插件analysis-stconvert

插件地址: https://github.com/infinilabs/analysis-stconvert/releases

2.1 下载已有作者编译后的包文件

如果存在可直接使用的zip文件,选择与自己版本一致的版本在这里插入图片描述

2.2 下载源码进行编译

如果没有下载即可使用的安装包,需要自己下载源码进行编译。下载打开后使用mvn clean install进行打包

image-20240621135510851

如果报错信息如下:

[ERROR] COMPILATION ERROR :
[INFO] -------------------------------------------------------------
[ERROR] /E:/project/PersonalProjects/analysis-stconvert-7.17.11/analysis-stconvert-7.17.11/src/main/java/org/elasticsearch/index/analysis/STConvertAnalyzerProvider.java:[28,9] 无法将类 org.elasticsearch.index.analysis.AbstractIndexA
nalyzerProvider<T>中的构造器 AbstractIndexAnalyzerProvider应用到给定类型;需要: org.elasticsearch.index.IndexSettings,java.lang.String,org.elasticsearch.common.settings.Settings找到: java.lang.String,org.elasticsearch.common.settings.Settings原因: 实际参数列表和形式参数列表长度不同
[ERROR] /E:/project/PersonalProjects/analysis-stconvert-7.17.11/analysis-stconvert-7.17.11/src/main/java/org/elasticsearch/index/analysis/STConvertTokenFilterFactory.java:[31,9] 无法将类 org.elasticsearch.index.analysis.AbstractToke
nFilterFactory中的构造器 AbstractTokenFilterFactory应用到给定类型;需要: org.elasticsearch.index.IndexSettings,java.lang.String,org.elasticsearch.common.settings.Settings找到: java.lang.String,org.elasticsearch.common.settings.Settings原因: 实际参数列表和形式参数列表长度不同
[ERROR] /E:/project/PersonalProjects/analysis-stconvert-7.17.11/analysis-stconvert-7.17.11/src/main/java/org/elasticsearch/index/analysis/STConvertCharFilterFactory.java:[34,9] 无法将类 org.elasticsearch.index.analysis.AbstractCharF
ilterFactory中的构造器 AbstractCharFilterFactory应用到给定类型;需要: org.elasticsearch.index.IndexSettings,java.lang.String找到: java.lang.String原因: 实际参数列表和形式参数列表长度不同
[INFO] 3 errors
[INFO] -------------------------------------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE

下面类中,增加如下参数,标红报错不需要处理仍可以打包成功

image-20240621141224356

打包成功后可以在项目目录\target\releases看到编译后的压缩包elasticsearch-analysis-stconvert-7.17.11.zip

image-20240621141327596

2.3 复制解压插件到es安装目录的plugins文件夹下

image-20240621142124582

es数据库启动时会自动加载插件,如下输出即表示引入成功

image-20240621142402756

3. 引入ik分词器插件

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

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

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

image-20240421170408043

3.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

3.3 安装ik分词插件

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

image-20240421173223669

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

image-20240421173516905

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

4. 建立IK和繁简集成的es索引

PUT http://localhost:9200/test/
{"aliases": {},"settings": {"index": {"refresh_interval": "3s","number_of_shards": "3","number_of_replicas": "1","max_inner_result_window": "10000","max_result_window": "20000","analysis": {"analyzer": {"ik_max_word_convert": {"type": "custom","char_filter": ["tsconvert","stconvert"],"tokenizer": "ik_max_word","filter": ["lowercase"]},"ik_smart_convert": {"type": "custom","char_filter": ["tsconvert","stconvert"],"tokenizer": "ik_smart","filter": ["lowercase"]}}}}},"mappings": {"properties": {"otherTitle": {"type": "text","analyzer": "ik_max_word_convert","search_analyzer": "ik_smart_convert"}}}
}

analysis部分定义了自定义分析器:

  • ik_max_word_convert:
    • type: "custom" :定义一个自定义分析器。
    • char_filter:
      • tsconvert: 自定义字符过滤器(用于繁体到简体转换)。
      • stconvert: 自定义字符过滤器(用于简体到繁体转换)。
    • tokenizer: "ik_max_word" - 使用IK分析器的最大词语分割。
    • filter: ["lowercase"] - 将所有字符转换为小写。
  • ik_smart_convert:
    • type: "custom"
    • char_filter:
      • tsconvert
      • stconvert
    • tokenizer: "ik_smart"
    • filter: ["lowercase"]

5. 新增数据测试检索

新增测试数据

PUT /test/_doc/2
{"nickName":"語法講義"
} PUT /test/_doc/3
{"nickName":"语法讲义"
} 

中文简写查询

image-20240621145358721

中文繁体查询

image-20240621145557738

通过上述配置和测试,我们可以看到无论是简体输入还是繁体输入,ES都能正确检索到相关文档。这证明了我们引入的繁简转换和IK分词插件的有效性,以及自定义分析器配置的正确性

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

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

相关文章

示例:推荐一个基于第三方开源控件库DataGridFilter封装的FilterColumnDataGrid,可以像Excel拥有列头筛选器

一、目的&#xff1a;基于第三方开源控件库DataGridFilter封装的FilterColumnDataGrid&#xff0c;可以像Excel拥有列头筛选器&#xff0c;感兴趣的可以去下方链接地址查看开源控件库地址。本控件封装的目的在于将第三方库的皮肤和样式封装到皮肤库中可统一设置样式&#xff0c…

某md5魔改-js还原

我们先把js 扣下来看一下 整体扣一下 ,运行后发现结果一致。 到这里就结束了吗,不不,这次我们要看到它里面具体的变动 <-_-> 先看一下md5的初步加密流程 void MD5Init(MD5_CTX *context) {context->count[0] = 0;context->count[1] = 0;context->state[0]…

linux 简单使用 sftp 和 lftp命令

目录 一. 环境准备二. sftp命令连接到SFTP服务器三. lftp命令3.1 连接FTP和SFTP服务器3.2 将文件从sftp服务器下载到本地指定目录 四. 通过WinSCP命令行从SFTP服务器获取文件到Windows 一. 环境准备 ⏹在安卓手机上下载个MiXplorer&#xff0c;用作SFTP和FTP服务器 官网: htt…

Typora + Hexo 图片路径问题(Typedown)

文章目录 1. 冲突来源2. 解决思路3. 实现1. typora图片路径2. hexo脚本 1. 冲突来源 Hexo上对于图片在md中的引用&#xff0c;使用了post_asset_folder: true配置&#xff0c;来更好的管理图片。 当一篇名为xxx.md的文章引用1.png图片时&#xff0c;默认让1.png保持在xxx文件夹…

cpolar:通过脚本自动更新主机名称和端口号进行内网穿透【免费版】

cpolar 的免费版经常会重新分配 HostName 和 Port&#xff0c;总是手动修改太过麻烦&#xff0c;分享一下自动更新配置文件并进行内网穿透的方法。 文章目录 配置 ssh config编写脚本获取 csrf_token打开登陆界面SafariChrome 设置别名 假设你已经配置好了服务器端的 cpolar。 …

路由

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 客户端&#xff08;例如浏览器&#xff09;把请求发送给 Web 服务器&#xff0c;Web 服务器再把请求发送给 Flask程序实例。程序实例需要知道对每个U…

oracle 外连接(+)和left join用法

案例1&#xff1a; select count(1) FROM TFUNDINFO A, TFUNDTYPE B WHERE A.VC_FUNDCODEB.VC_FUNDCODE() select count(1) FROM TFUNDINFO A, TFUNDTYPE B WHERE A.VC_FUNDCODEB.VC_FUNDCODE SELECT count(1): 这表示查询将返回一个计数&#xff0c;count(1)是一种常见的计数…

【database1】mysql:DDL/DML/DQL,外键约束/多表/子查询,事务/连接池

文章目录 1.mysql安装&#xff1a;存储&#xff1a;集合&#xff08;内存&#xff1a;临时&#xff09;&#xff0c;IO流&#xff08;硬盘&#xff1a;持久化&#xff09;1.1 服务端&#xff1a;双击mysql-installer-community-5.6.22.0.msi1.2 客户端&#xff1a;命令行输入my…

松下课堂 | 什么是EPS?通过马达来辅助转向操作的系统

EPS , 松下 EPS是一种通过马达来减轻和辅助驾驶员在转向操作时所需力量的设备。此外&#xff0c;通过采用EPS&#xff0c;可望提高燃效&#xff0c;降低车辆重量。。。 背景 EPS是一种通过马达来减轻和辅助驾驶员在转向操作时所需力量的设备。此外&#xff0c;通过采用EPS&…

重庆交通大学24计算机考研数据速览,专硕第二年招生,复试线321分!

重庆交通大学&#xff08;Chongqing Jiaotong University&#xff0c;CQJTU&#xff09;&#xff0c;是由重庆市人民政府和中华人民共和国交通运输部共建的一所交通特色、以工为主的多科性大学&#xff0c;入选“中西部高校基础能力建设工程”、“卓越工程师教育培养计划”、国…

【机器学习300问】128、简述什么Word2Vec?

一、一句话说明Word2Vec是什么&#xff1f; Word2Vec是一种常见的词嵌入技术。Word2Vec的目标是将每个词表示为一个向量&#xff0c;使得这些向量能够反映出词语之间的相似性和关联性。 word2vec算法通过预测中心词和上下文词的共现概率来学习词向量&#xff0c;能够捕捉词语之…

TypedDict 解析

TypedDict 解析 文章目录 TypedDict 解析1. 类型安全性2. 可读性3. 可维护性TypedDict 的解决方案没有 TypedDict 会发生什么&#xff1f;使用 TypedDict 的优势 TypedDict 应用场景1. 配置文件解析2. API 数据解析3. 数据库记录表示4. 表单数据验证5. 大型团队协作6. 静态类型…

正则表达式与文本处理器

正则表达式 基础正大表达式 查看特定字符 grep grep-n the test.txt grep-in the test.txt-n 显示行号 -i 不区分大小写 -v 反转查找 [] &#xff1a;中括号里可以写元素&#xff0c;内容符合任意元素&#xff0c;就会过滤出来 ^ :写在中括号里&#xff0c;代表取反。以^开头&…

图像编辑技术的新篇章:基于扩散模型的综述

在人工智能的浪潮中&#xff0c;图像编辑技术正经历着前所未有的变革。随着数字媒体、广告、娱乐和科学研究等领域对高质量图像编辑需求的不断增长&#xff0c;传统的图像编辑方法已逐渐无法满足日益复杂的视觉内容创作需求。尤其是在AI生成内容&#xff08;AIGC&#xff09;的…

富文本编辑器CKEditor

介绍 富文本编辑器不同于文本编辑器,它提供类似于 Microsoft Word 的编辑功能 在Django中,有可以现成的富文本三方模块django-ckeditor,具体安排方式: pip install django-ckeditor==6.5.1官网:Django CKEditor — Django CKEditor 6.7.0 documentation 使用方式 创建项…

pytest测试框架flaky插件重试失败用例

Pytest提供了丰富的插件来扩展其功能&#xff0c;本章介绍下插件flaky &#xff0c;用于在测试用例失败时自动重新运行这些测试用例。与前面文章介绍的插件pytest-rerunfailures功能有些类似&#xff0c;但是功能上不如pytest-rerunfailures插件丰富。 flaky官方并没有明确pyt…

华为od-C卷200分题目2 - 找城市

华为od-C卷200分题目2 - 找城市 题目描述 一个城市规划问题&#xff0c;一个地图有很多城市&#xff0c;两个城市之间只有一种路径&#xff0c;切断通往一 个城市i的所有路径之后&#xff0c;其他的城市形成了独立的城市群&#xff0c;这些城市群里最大的城 市数量&#xff0…

QML 列表,图片展示(一)

文章目录 1.QML 列表&#xff0c;图片展示效果图2.项目基本说明3.项目详解3.1界面显示部分3.2 网络部分 4.源代码5.flickr图片查询链接&#xff0c;后面我们将调整代码&#xff0c;获取更多图片 1.QML 列表&#xff0c;图片展示效果图 2.项目基本说明 该项目来自Qt示例程序 Ph…

2025秋招NLP算法面试真题(二)-史上最全Transformer面试题:灵魂20问帮你彻底搞定Transformer

简单介绍 之前的20个问题的文章在这里&#xff1a; https://zhuanlan.zhihu.com/p/148656446 其实这20个问题不是让大家背答案&#xff0c;而是为了帮助大家梳理 transformer的相关知识点&#xff0c;所以你注意看会发现我的问题也是有某种顺序的。 本文涉及到的代码可以在…

很冷门但真的有趣的IOS应用

Tuesday Tuesday纪念日小组件是一款功能丰富的倒数日和桌面小组件工具APP。此外&#xff0c;Tuesday软件还具有超萌小清新的风格&#xff0c;界面设计清新可爱&#xff0c;适合各种场景使用。用户可以通过小组件实现各种趣味功能&#xff0c;满足不同心情需求。 SideNotes Si…