当前位置: 首页 > news >正文

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

然后同第三步,同步一下数据内容

第七步

通过新字段来进行拼音搜索,结果如下:

http://www.lryc.cn/news/233954.html

相关文章:

  • java线性并发编程介绍-锁(二)
  • Java JPA详解:从入门到精通
  • 使用Open3D库处理3D模型数据的实践指南
  • 代码随想录算法训练营第五十八天丨 动态规划part18
  • Pytest自动化测试框架介绍
  • 基于SpringBoot+Redis的前后端分离外卖项目-苍穹外卖(五)
  • Oracle 监控的指标有哪些和oracle巡检的内容
  • Uniapp有奖猜歌游戏系统源码 带流量主
  • 【算法与数据结构】前言
  • (六)什么是Vite——热更新时vite、webpack做了什么
  • 贝加莱MQTT功能
  • 基于JavaWeb+SSM+购物系统微信小程序的设计和实现
  • 为什么需要Code Review?
  • 【计算机网络笔记】ICMP(互联网控制报文协议)
  • Git教程1:生成和提交SSH公钥到远程仓库
  • 贝茄莱BR AS实时数据采集功能
  • Git的基本操作以及原理介绍
  • 2023安全与软工顶会/刊中区块链智能合约相关论文
  • word文档转换为ppt文件,怎么做?
  • 机器视觉选型-什么时候用远心镜头
  • quartz笔记
  • ER 图是什么
  • PLC电力载波通讯,一种新的IoT通讯技术
  • Elasticsearch:通过摄取管道加上嵌套向量对大型文档进行分块轻松地实现段落搜索
  • OpenCV图像纹理
  • 自媒体写手提问常用的ChatGPT通用提示词模板
  • 分类预测 | Matlab实现PSO-LSTM-Attention粒子群算法优化长短期记忆神经网络融合注意力机制多特征分类预测
  • 3GPP TS38.201 NR; Physical layer; General description (Release 18)
  • 【GitLab】-HTTP 500 curl 22 The requested URL returned error: 500~SSH解决
  • 【如何学习Python自动化测试】—— 自动化测试环境搭建