ES全文检索支持拼音和繁简检索
ES全文检索支持拼音和繁简检索
- 1. 实现目标
- 2. 引入pinyin插件
- 2.1 编译 elasticsearch-analysis-pinyin 插件
- 2.2 安装拼音插件
- 3. 引入ik分词器插件
- 3.1 已有作者编译后的包文件
- 3.2 只有源代码的版本
- 3.3 安装ik分词插件
- 4. 建立es索引
- 5.测试检索
- 6. 繁简转换
1. 实现目标
ES检索时无论输入简体还是繁体都要能够被检索到,例如检索时输入“語法”或者“语法”,检索结果中无论是简体繁体都务必要被命中。
并且也要正确的高亮返回

2. 引入pinyin插件
拼音分词器(pinyin analyzer)通常需要自行引入,因为它不是 Elasticsearch 的默认分词器。可以使用 Elasticsearch 的插件来引入 pinyin 分词器,以便在索引中使用它。
2.1 编译 elasticsearch-analysis-pinyin 插件
选择与自己版本一致的版本,插件地址:
https://github.com/medcl/elasticsearch-analysis-pinyin/releases

elasticsearch-analysis-pinyin分词器目前没有下载即可使用的安装包,需要自己下载源码进行编译。可以在项目目录elasticsearch-analysis-pinyin\target\releases看到编译后的结果elasticsearch-analysis-pinyin-7.17.11.zip

2.2 安装拼音插件
然后在es的安装目录下plugins目录下新建pinyin目录,并将解压后的文件复制到该目录下

重启es,启动日志中已经加载了拼音插件

3. 引入ik分词器插件
GitHub下载地址:Releases · infinilabs/analysis-ik · GitHub
3.1 已有作者编译后的包文件
选择与所需es版本相同的ik分词器,下载已经打包后的.zip文件

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

使用 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入参的第一个位置

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

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

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

常规的最常用的使用方式就是,数据插入存储时用 ik_max_word模式分词,而检索时,用ik_smart模式分词,即:索引时最大化的将文章内容分词,搜索时更精确的搜索到想要的结果。
建立映射示例如下:在数据被索引时我们设置"analyzer": “ik_max_word”,在检索时指定"search_analyzer": “ik_smart”
4. 建立es索引
setting.json
{"aliases": {},"settings": {"index": {"refresh_interval": "3s","number_of_shards": "3","number_of_replicas": "1","max_inner_result_window": "10000","max_result_window": "20000","analysis": {"filter": {"pinyin_full_filter": {"keep_joined_full_pinyin": "true","lowercase": "true","keep_original": "false","keep_first_letter": "false","keep_separate_first_letter": "false","type": "pinyin","keep_none_chinese": "false","limit_first_letter_length": "50","keep_full_pinyin": "true"},"pinyin_simple_filter": {"keep_joined_full_pinyin": "true","lowercase": "true","none_chinese_pinyin_tokenize": "false","padding_char": " ","keep_original": "true","keep_first_letter": "true","keep_separate_first_letter": "false","type": "pinyin","keep_full_pinyin": "false"}},"analyzer": {"pinyinFullIndexAnalyzer": {"filter": ["asciifolding","lowercase","pinyin_full_filter"],"type": "custom","tokenizer": "ik_max_word"},"pinyinSimpleIndexAnalyzer": {"filter": ["pinyin_simple_filter","lowercase"],"type": "custom","tokenizer": "ik_max_word"},"ik_pinyin_analyzer": {"filter": ["asciifolding","lowercase","pinyin_full_filter","word_delimiter"],"type": "custom","tokenizer": "ik_smart"},"ikIndexAnalyzer": {"filter": ["asciifolding","lowercase","pinyin_full_filter","word_delimiter"],"type": "custom","tokenizer": "ik_max_word"}}}}},"mappings": {"dynamic": "false"}
}
mapping.json
{"properties": {"nickName": {"type": "text","analyzer": "ikIndexAnalyzer","search_analyzer": "ik_pinyin_analyzer","fields": {"full": {"type": "text","analyzer": "pinyinFullIndexAnalyzer"},"simple": {"type": "text","analyzer": "pinyinSimpleIndexAnalyzer"}}}}
}
mapping.json 文件定义了 Elasticsearch 索引中的字段映射和分析器设置:
-
analyzer:定义了在索引时使用的分析器。在搜索时会用这个分析器来处理查询字符串,使之与索引中的文本数据匹配。
ikIndexAnalyzer分析器使用了ik_max_word分词器(tokenizer),并应用了一系列过滤器(filter),包括 ASCII 折叠、小写转换、拼音处理和词分割。 -
search_analyzer:定义了在搜索时使用的分析器。
ik_pinyin_analyzer分析器用于处理查询字符串,在进行搜索时与索引中的数据进行匹配。 -
fields:定义了为同一个字段创建不同的索引方式。在这个示例中,为
nickName字段创建了两个额外的索引方式:full和simple。-
full:使用了
pinyinFullIndexAnalyzer分析器,它将nickName字段的文本进行全拼音分析,用于支持全拼音搜索。 -
simple:使用了
pinyinSimpleIndexAnalyzer分析器,它将nickName字段的文本进行简拼音分析,用于支持简拼音搜索。
-
5.测试检索
新增测试数据
PUT /zzt_works/_doc/2
{"nickName":"語法講義"
} PUT /zzt_works/_doc/3
{"nickName":"语法讲义"
}
中文简写查询

中文繁体查询

拼音全拼查询

拼音简拼查询

6. 繁简转换
如果需求只需要繁简转换,可使用以下设置和映射配置
index.json
{"aliases": {},"settings": {"index": {"refresh_interval": "3s","number_of_shards": "3","number_of_replicas": "1","max_inner_result_window": "10000","max_result_window": "20000","analysis": {"filter": {"pinyin_full_filter": {"keep_joined_full_pinyin": "true","lowercase": "true","keep_original": "false","keep_first_letter": "false","keep_separate_first_letter": "false","type": "pinyin","keep_none_chinese": "false","limit_first_letter_length": "50","keep_full_pinyin": "true"}},"analyzer": {"ik_pinyin_analyzer": {"filter": ["asciifolding","lowercase","pinyin_full_filter","word_delimiter"],"type": "custom","tokenizer": "ik_smart"},"ikIndexAnalyzer": {"filter": ["asciifolding","lowercase","pinyin_full_filter","word_delimiter"],"type": "custom","tokenizer": "ik_max_word"}}}}},"mappings": {"dynamic": "false"}
}
mapping.json
{"properties": {"nickName": {"type": "text","analyzer": "ikIndexAnalyzer","search_analyzer": "ik_pinyin_analyzer"}}
}
相关文章:
ES全文检索支持拼音和繁简检索
ES全文检索支持拼音和繁简检索 1. 实现目标2. 引入pinyin插件2.1 编译 elasticsearch-analysis-pinyin 插件2.2 安装拼音插件 3. 引入ik分词器插件3.1 已有作者编译后的包文件3.2 只有源代码的版本3.3 安装ik分词插件 4. 建立es索引5.测试检索6. 繁简转换 1. 实现目标 ES检索时…...
【DDR 终端稳压器】Sink and Source DDR Termination Regulator [C] S0 S1 S2 S3 S4 S5 6状态
TPS51200A-Q1 器件通过 EN 功能提供 S3 支持。EN引脚可以连接到终端应用中的SLP_S3信号。当EN 高电平(S0 状态)时,REFOUT 和 VO 引脚均导通。当EN 低电平(S3状态)时,VO引脚关断并通过内部放电MOSFET放电时…...
使用IIS部署Vue项目
前提 使用IIS部署Vue项目,后端必须跨域,不要在Vue中用proxy跨域,那个只在dev环境中有用! IIS安装,不用全部打勾,有些他默认就是方块 ■ 选择性安装的,就维持原样就可以。 添加网站配置 右键…...
QT+多线程TCP服务器+进阶版
针对之前的服务器,如果子线程工作类里面需要使用socket发送消息,必须要使用信号与槽的方法, 先发送一个信号给父进程,父进程调用socket发送消息(原因是QT防止父子进程抢夺同一资源,因此直接规定父子进程不能…...
Java入门基础学习笔记12——变量详解
变量详解: 变量里的数据在计算机中的存储原理。 二进制: 只有0和1, 按照逢2进1的方式表示数据。 十进制转二进制的算法: 除二取余法。 6是110 13是1101 计算机中表示数据的最小单元:一个字节(byte&…...
bitmap requires a valid src attribute
关于作者:CSDN内容合伙人、技术专家, 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 ,擅长java后端、移动开发、商业变现、人工智能等,希望大家多多支持。 未经允许不得转载 目录 一、导读二、概览三、问题记录四、 推…...
Java刷题-基础篇
目录 题目1:打印1~100内奇数和、偶数和 题目2:计算5的阶乘 题目3:计算 1!2!3!4!5! 的和 题目4:找1~100之间即能被3整除,又能被5整除的数字,要求必须使用break/continue 题目5:实现猜数字小…...
Linux——mysql运维篇
回顾基本语句: 数据定义语言 ( DDL ) 。这类语言用于定义和修改数据库的结构,包括创建、删除和修改数据库、表、视图和索引等对象。主要的语句关键字包括 CREATE 、 DROP 、 ALTER 、 RENAME 、 TRUNCATE 等。 create database 数据库 &…...
力扣每日一题-统计已测试设备-2024.5.10
力扣题目:统计已测试设备 题目链接: 2960.统计已测试设备 题目描述 代码思路 根据题目内容,第一感是根据题目模拟整个过程,在每一步中修改所有设备的电量百分比。但稍加思索,发现可以利用已测试设备的数量作为需要减少的设备电…...
代码+视频,R言语处理数据中的缺失值
在SCI论文中,我们不可避免和缺失数据打交道,特别是在回顾性研究,对于缺失的协变量(就是混杂因素),我们可以使用插补补齐数据,但是对于结局变量和原因变量的缺失,我们不能这么做。部分…...
PGSync安装使用教程(PostgreSQL数据实时同步至Elasticsearch)
说明 pgsync项目有两个,一个是ankane/pgsync,用于pgsql之间的数据同步,另一个是toluaina/pgsync,用于pgsql的数据同步至es,本教程适用于第二个项目。 pgsync应该是目前为止唯二支持es8的数据同步工具,另一…...
前端主题切换的多种方式
动态link标签加载不同主题css **原理:**提前准备好几套CSS主题样式文件,在点击切换主题时,创建link标签动态加载到head标签中,或者是动态改变link标签的href属性。 缺点: 动态加载样式文件,如果文件过大网…...
使用RESTful API构建 web 应用程序
RESTful API是一种基于HTTP协议的架构风格,用于设计网络应用程序的 API。它强调使用标准的HTTP方法(如GET、POST、PUT和DELETE)对资源进行操作,并使用统一的资源标识符(URI)来唯一标识每个资源。RESTful AP…...
KaiOS Data PDN 数据建立流程
代码逻辑 APN创建 在 DataCallManager.jsm中,会对所有apnsetting创建一个datacall,其中会包含dataprofile的成员(通过apn参数来创建),在之后的流程用于直接发送到modem建立PDN。 PDN建立 1、DataCallManager.jsm -dcInterface.setupDataCall //RILNetworkInterface.c…...
Mybatis-Plus常用的增删改查坑
添加依赖 <!--实体类上加上Data注解就不用写get,set,toString,equals等方法了--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional…...
初识指针(4)<C语言>
前言 前面的文章,已经对指针的基础概念以及运用有了初步了解,我们可以进一步探究指针比较深入的知识,下文将主要介绍:使用指针数组模拟二维数组、字符指针变量、数组指针、二维数组传参的本质、函数指针、typedef关键字等。 目录…...
pyqt 工具栏QToolBar控件
pyqt 工具栏QToolBar控件 QToolBar控件介绍效果代码 QToolBar控件介绍 QToolBar 是 PyQt(中的一个控件,它提供了一个工具栏,通常包含一系列的工具按钮或下拉菜单,用于提供对应用程序功能的快速访问。 QToolBar 通常与 QMainWind…...
SystemVerilog/Verilog中的仿真延时建模之模块路径延时
一 概要 模块路径延迟,描述的是模块中信号从源端到目的端传输的延迟。 路径以及对应的延迟是在模块中的specify块中指定的,其中信号源端一般为input或者inout,而目的端则只能为output或者inout.在specify中指定的模块路径,常见的形式主要三种,分别是: 简单路径(Simple Path…...
代码随想录算法训练营Day36 | 738.单调递增的数字、968.监控二叉树、贪心算法总结 | Python | 个人记录向
本文目录 738.单调递增的数字做题看文章 968.监控二叉树做题看文章 贪心算法总结以往忽略的知识点小结个人体会 738.单调递增的数字 代码随想录:738.单调递增的数字 Leetcode:738.单调递增的数字 做题 无思路。 看文章 例如:98ÿ…...
FME学习之旅---day26
我们付出一些成本,时间的或者其他,最终总能收获一些什么。 【由于上周,上班状态不是很好,事情多又杂,没有学习的劲头,就短暂的休息了一下下。双休爬山,给自己上了强度,今天才缓过来…...
iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘
美国西海岸的夏天,再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至,这不仅是开发者的盛宴,更是全球数亿苹果用户翘首以盼的科技春晚。今年,苹果依旧为我们带来了全家桶式的系统更新,包括 iOS 26、iPadOS 26…...
springboot 百货中心供应链管理系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,百货中心供应链管理系统被用户普遍使用,为方…...
iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版分享
平时用 iPhone 的时候,难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵,或者买了二手 iPhone 却被原来的 iCloud 账号锁住,这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...
基于Uniapp开发HarmonyOS 5.0旅游应用技术实践
一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架,支持"一次开发,多端部署",可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务,为旅游应用带来…...
工程地质软件市场:发展现状、趋势与策略建议
一、引言 在工程建设领域,准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具,正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...
【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)
骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术,它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton):由层级结构的骨头组成,类似于人体骨骼蒙皮 (Mesh Skinning):将模型网格顶点绑定到骨骼上,使骨骼移动…...
Android15默认授权浮窗权限
我们经常有那种需求,客户需要定制的apk集成在ROM中,并且默认授予其【显示在其他应用的上层】权限,也就是我们常说的浮窗权限,那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...
IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)
文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...
SpringCloudGateway 自定义局部过滤器
场景: 将所有请求转化为同一路径请求(方便穿网配置)在请求头内标识原来路径,然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...
Spring AI与Spring Modulith核心技术解析
Spring AI核心架构解析 Spring AI(https://spring.io/projects/spring-ai)作为Spring生态中的AI集成框架,其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似,但特别为多语…...
