Es 拼音搜索无法高亮
目录
背景:
Es 版本:
第一步
第二步 (错误步骤 - 只是记录过程)
第三步
第四步
第五步
第六步
第七步
背景:
app 原有的搜索功能无法进行拼音搜索,产品希望可以支持,例如内容中含有:中国通史记,那不管搜 `通史` or `tongshi`,都可以搜到这个内容
Es 版本:
6.4.0
第一步
确定es目前是否支持pinyin的搜索能力,没有的话需要下载相关组件,下载这里不做介绍
可执行以下命令确定:
POST /_analyze
{"analyzer": "pinyin","text": "中国通史"
}
正常得到以下结果:
{"tokens": [{"token": "zhong","start_offset": 0,"end_offset": 0,"type": "word","position": 0},{"token": "zgts","start_offset": 0,"end_offset": 0,"type": "word","position": 0},{"token": "guo","start_offset": 0,"end_offset": 0,"type": "word","position": 1},{"token": "tong","start_offset": 0,"end_offset": 0,"type": "word","position": 2},{"token": "shi","start_offset": 0,"end_offset": 0,"type": "word","position": 3}]
}
第二步 (错误步骤 - 只是记录过程)
新增索引字段,例如:content_pinyin, analyzer为:pinyin
PUT /index/_mapping/_doc
{"properties": {"content_pinyin": {"type": "text","analyzer": "pinyin"}}
}
第三步
同步数据,将原content的文档数据同步给content_pinyin, 同步方式可参考 (生产环境要考虑数据量的问题,否则影响线上业务,数据过大建议使用脚本进行数据刷新):
POST /index/_update_by_query
{"script": {"source": "ctx._source.content_pinyin = ctx._source.content","lang": "painless"},"query": {"match_all": {}}
}
第四步
使用新字段进行搜索,结果如下:

搜索结果没有问题,但是会发现,高亮字段竟然是整个内容:

第五步
参考此文章:【精选】ElasticSearch7.6.2 拼音,中文,中音搜索,高亮搜索关键字_es 中文和拼音搜索-CSDN博客
找到了答案
需要修改索引设置,新增自定义分析器和过滤器来实现高亮
# 要先临时关闭索引
POST /index/_close# 修改索引设置
PUT /index/_settings
{"settings": {"analysis": {"analyzer": {"ik_pinyin_analyzer": {"tokenizer": "my_pinyin"}},"tokenizer": {"my_pinyin": {"type": "pinyin","keep_full_pinyin": true,"keep_original": false,"limit_first_letter_length": 10,"lowercase": true,"remove_duplicated_term": false,"ignore_pinyin_offset": false,"keep_first_letter": true,"keep_separate_first_letter": true}}}}
}# 打开索引
POST /bm_ebook/_open
这里如果在线上操作,可能会导致一段时间的服务不可用,顺利的话大概五秒左右,如果能接受可以直接执行,不行的话只能新建索引,然后刷一遍数据
第六步
新建字段 (因为es不允许修改已经生效的字段的分析器,所以我只能再新建一个字段)
PUT /index/_mapping/_doc
{"properties": {"ik_content_pinyin": {"type": "text","analyzer": "ik_pinyin_analyzer"}}
}
这里分析器使用刚刚新增的自定义分析器: ik_pinyin_analyzer
然后同第三步,同步一下数据内容
第七步
通过新字段来进行拼音搜索,结果如下:

相关文章:
Es 拼音搜索无法高亮
目录 背景: Es 版本: 第一步 第二步 (错误步骤 - 只是记录过程) 第三步 第四步 第五步 第六步 第七步 背景: app 原有的搜索功能无法进行拼音搜索,产品希望可以支持,例如内容中含有&a…...
java线性并发编程介绍-锁(二)
2.5 重量锁底层ObjectMonitor 需要去找到openjdk,在百度中直接搜索openjdk,第一个链接就是 找到ObjectMonitor的两个文件,hpp,cpp 先查看核心属性:http://hg.openjdk.java.net/jdk8u/jdk8u/hotspot/file/69087d08d473…...
Java JPA详解:从入门到精通
描述:本文详细介绍了Java JPA的概念、使用方法以及常见问题,帮助读者从入门到精通掌握JPA。 关键词:Java JPA、Hibernate、持久层框架、ORM、数据库访问 一、Java JPA概述 Java Persistence API(JPA)是JavaEE 5规范…...
使用Open3D库处理3D模型数据的实践指南
目录 引言 一、安装Open3D库 二、加载3D模型数据 三、处理3D模型数据 1、去除模型中的无效面 2、提取模型特征 四、存储处理后的3D模型数据 五、可视化处理后的3D模型数据 六、注意事项 结论 引言 在处理3D模型数据时,Open3D库是一个功能强大且易于使用的…...
代码随想录算法训练营第五十八天丨 动态规划part18
739. 每日温度 思路 首先想到的当然是暴力解法,两层for循环,把至少需要等待的天数就搜出来了。时间复杂度是O(n^2) 那么接下来在来看看使用单调栈的解法。 什么时候用单调栈呢? 通常是一维数组,要寻找任一个元素的右边或者左边…...
Pytest自动化测试框架介绍
1、什么是单元测试框架 单元测试是指在软件开发当中,针对软件的最小单位(函数,方法)进行正确性的检查测试。 2、单元测试框架主要做什么 测试发现:从多个文件里面去找到我们需要的测试用例。 测试执行:按…...
基于SpringBoot+Redis的前后端分离外卖项目-苍穹外卖(五)
公共字段自动填充 1.1 问题分析1.2 实现思路1.3 代码开发1.3.1 步骤一1.3.2 步骤二1.3.3 步骤三 1.4 功能测试 1.1 问题分析 在前面我们已经完成了后台系统的员工管理功能和菜品分类功能的开发,在新增员工或者新增菜品分类时需要设置创建时间、创建人、修改时间、修…...
Oracle 监控的指标有哪些和oracle巡检的内容
日常监控指标: 性能指标: 查询响应时间CPU利用率内存利用率磁盘 I/O 活动网络吞吐量 空间管理: 表空间使用率数据文件增长情况Undo 表空间使用率临时表空间使用率 会话和连接: 活跃会话数等待事件监控连接数和连接池效率 数据库对…...
Uniapp有奖猜歌游戏系统源码 带流量主
有奖猜歌游戏是一款基于uni-app、uniCloud、uniAD 开发的小游戏,通过猜歌曲、观看广告赚取现金奖励。 本游戏基本特征如下: 1、玩家可以通过猜歌、做任务等方式直接获取现金奖励 2、玩家可以通过猜歌、拆红包、做任务等方式获取金币奖励,当金币累积到一定数量可以兑换现金 3…...
【算法与数据结构】前言
算法与数据结构是OI中不可或缺的一部分。 今天,让我们走进算法与数据结构独特世界。 性能 算法与数据结构都是完成任务的方法。 方法就要有性能。 有效率就有描述性能的语言。 这就是复杂度。 复杂度的描述 由于复杂度描述的是大致性能,所以采用的是…...
(六)什么是Vite——热更新时vite、webpack做了什么
vite分享ppt,感兴趣的可以下载: Vite分享、原理介绍ppt 什么是vite系列目录: (一)什么是Vite——vite介绍与使用-CSDN博客 (二)什么是Vite——Vite 和 Webpack 区别࿰…...
贝加莱MQTT功能
贝加莱实现MQTT Client端的功能库和例程 导入库和例程,AS Logical View中分别通过Add Object—Library,Add—Program插入MQTT库和例程。 将例程Sample放置于CPU循环周期中 定义证书存放路径,在AS Physical View 中,右击PLC—Con…...
基于JavaWeb+SSM+购物系统微信小程序的设计和实现
基于JavaWebSSM购物系统微信小程序的设计和实现 源码获取入口前言主要技术系统设计功能截图Lun文目录订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 源码获取入口 前言 第一章 绪 论 1.1选题背景 互联网是人类的基本需求,特别是在现代社会,…...
为什么需要Code Review?
1. Code Review 是什么? 代码审查(Code Review)是软件开发过程中对代码进行系统性检查和评审的一项活动。它是指团队成员之间相互检查彼此编写的代码,以确保代码质量、可读性和符合编码标准等。 2. Code Review 的必要性 ● 提…...
【计算机网络笔记】ICMP(互联网控制报文协议)
系列文章目录 什么是计算机网络? 什么是网络协议? 计算机网络的结构 数据交换之电路交换 数据交换之报文交换和分组交换 分组交换 vs 电路交换 计算机网络性能(1)——速率、带宽、延迟 计算机网络性能(2)…...
Git教程1:生成和提交SSH公钥到远程仓库
要生成 Git 的公钥并将其提交到远程仓库,你可以按照以下步骤进行操作: 打开命令行终端,并确保已经安装了 Git。在终端中输入以下命令来生成 SSH 密钥对:ssh-keygen -t rsa -b 4096 -C "your_emailexample.com"这将生成…...
贝茄莱BR AS实时数据采集功能
实时数据采集功能在PLC系统调试过程中,有助于调试人员对变量变化进行监测,通过波形对比,反应不同变量间的相互作用。该测试目的在于验证贝加莱系统组态软件的实时数据采集功能。 贝加莱系统组态软件提供Trace功能,连接PLC&#x…...
Git的基本操作以及原理介绍
文章目录 基本操作创建git仓库配置name和email .git目录的结构git add & git commit.git目录结构的变化 git追踪管理的数据git的版本回退回退的原理回退的三种情况 版本库中文件的删除git分支管理分支的删除合并分支时的冲突分支的合并模式分支策略git stash不要在master分…...
2023安全与软工顶会/刊中区块链智能合约相关论文
2023安全与软工顶会/刊中区块链智能合约相关论文 前言软工顶会ISSTAFSEASEICSE 软工顶刊TOSEMTSE 安全顶会S&PUSENIX SecurityCCSNDSS 前言 主要整理了2023年四大安全顶会、四大软工顶会和两个软工顶刊中,有关区块链智能合约的相关论文。 搜索方式是࿱…...
word文档转换为ppt文件,怎么做?
大家是否会遇到需要将word文档转换为ppt文件的情况?除了反反复复粘贴复制以外,还有其他方法可以转换文件格式,今天给大家分享word转换ppt方法。 首先我们先将word文件打开大纲模式 然后我们将文中的大标题设置为1级标题,副标题设…...
突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合
强化学习(Reinforcement Learning, RL)是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程,然后使用强化学习的Actor-Critic机制(中文译作“知行互动”机制),逐步迭代求解…...
AI Agent与Agentic AI:原理、应用、挑战与未来展望
文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例:使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例:使用OpenAI GPT-3进…...
前端倒计时误差!
提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...
基于Flask实现的医疗保险欺诈识别监测模型
基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施,由雇主和个人按一定比例缴纳保险费,建立社会医疗保险基金,支付雇员医疗费用的一种医疗保险制度, 它是促进社会文明和进步的…...
HTML 列表、表格、表单
1 列表标签 作用:布局内容排列整齐的区域 列表分类:无序列表、有序列表、定义列表。 例如: 1.1 无序列表 标签:ul 嵌套 li,ul是无序列表,li是列表条目。 注意事项: ul 标签里面只能包裹 li…...
【git】把本地更改提交远程新分支feature_g
创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...
MySQL中【正则表达式】用法
MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现(两者等价),用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例: 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...
听写流程自动化实践,轻量级教育辅助
随着智能教育工具的发展,越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式,也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建,…...
Python ROS2【机器人中间件框架】 简介
销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...
uniapp 字符包含的相关方法
在uniapp中,如果你想检查一个字符串是否包含另一个子字符串,你可以使用JavaScript中的includes()方法或者indexOf()方法。这两种方法都可以达到目的,但它们在处理方式和返回值上有所不同。 使用includes()方法 includes()方法用于判断一个字…...
