码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Es 拼音搜索无法高亮


     

    目录

    背景:

    Es 版本:

    第一步

    第二步 (错误步骤 - 只是记录过程)

    第三步

    第四步

    第五步

    第六步

    第七步


    背景:

    app 原有的搜索功能无法进行拼音搜索,产品希望可以支持,例如内容中含有:中国通史记,那不管搜 `通史` or `tongshi`,都可以搜到这个内容

    Es 版本:

    6.4.0

    第一步

    确定es目前是否支持pinyin的搜索能力,没有的话需要下载相关组件,下载这里不做介绍

    可执行以下命令确定:

    1. POST /_analyze
    2. {
    3. "analyzer": "pinyin",
    4. "text": "中国通史"
    5. }

    正常得到以下结果:

    1. {
    2. "tokens": [
    3. {
    4. "token": "zhong",
    5. "start_offset": 0,
    6. "end_offset": 0,
    7. "type": "word",
    8. "position": 0
    9. },
    10. {
    11. "token": "zgts",
    12. "start_offset": 0,
    13. "end_offset": 0,
    14. "type": "word",
    15. "position": 0
    16. },
    17. {
    18. "token": "guo",
    19. "start_offset": 0,
    20. "end_offset": 0,
    21. "type": "word",
    22. "position": 1
    23. },
    24. {
    25. "token": "tong",
    26. "start_offset": 0,
    27. "end_offset": 0,
    28. "type": "word",
    29. "position": 2
    30. },
    31. {
    32. "token": "shi",
    33. "start_offset": 0,
    34. "end_offset": 0,
    35. "type": "word",
    36. "position": 3
    37. }
    38. ]
    39. }

    第二步 (错误步骤 - 只是记录过程)

    新增索引字段,例如:content_pinyin, analyzer为:pinyin

    1. PUT /index/_mapping/_doc
    2. {
    3. "properties": {
    4. "content_pinyin": {
    5. "type": "text",
    6. "analyzer": "pinyin"
    7. }
    8. }
    9. }

    第三步

    同步数据,将原content的文档数据同步给content_pinyin, 同步方式可参考 (生产环境要考虑数据量的问题,否则影响线上业务,数据过大建议使用脚本进行数据刷新):

    1. POST /index/_update_by_query
    2. {
    3. "script": {
    4. "source": "ctx._source.content_pinyin = ctx._source.content",
    5. "lang": "painless"
    6. },
    7. "query": {
    8. "match_all": {}
    9. }
    10. }

    第四步

    使用新字段进行搜索,结果如下:

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

    第五步

    参考此文章:【精选】ElasticSearch7.6.2 拼音,中文,中音搜索,高亮搜索关键字_es 中文和拼音搜索-CSDN博客

    找到了答案

    需要修改索引设置,新增自定义分析器和过滤器来实现高亮

    1. # 要先临时关闭索引
    2. POST /index/_close
    3. # 修改索引设置
    4. PUT /index/_settings
    5. {
    6. "settings": {
    7. "analysis": {
    8. "analyzer": {
    9. "ik_pinyin_analyzer": {
    10. "tokenizer": "my_pinyin"
    11. }
    12. },
    13. "tokenizer": {
    14. "my_pinyin": {
    15. "type": "pinyin",
    16. "keep_full_pinyin": true,
    17. "keep_original": false,
    18. "limit_first_letter_length": 10,
    19. "lowercase": true,
    20. "remove_duplicated_term": false,
    21. "ignore_pinyin_offset": false,
    22. "keep_first_letter": true,
    23. "keep_separate_first_letter": true
    24. }
    25. }
    26. }
    27. }
    28. }
    29. # 打开索引
    30. POST /bm_ebook/_open

    这里如果在线上操作,可能会导致一段时间的服务不可用,顺利的话大概五秒左右,如果能接受可以直接执行,不行的话只能新建索引,然后刷一遍数据

    第六步

    新建字段 (因为es不允许修改已经生效的字段的分析器,所以我只能再新建一个字段)

    1. PUT /index/_mapping/_doc
    2. {
    3. "properties": {
    4. "ik_content_pinyin": {
    5. "type": "text",
    6. "analyzer": "ik_pinyin_analyzer"
    7. }
    8. }
    9. }

    这里分析器使用刚刚新增的自定义分析器: ik_pinyin_analyzer

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

    第七步

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

  • 相关阅读:
    C语言入门Day_28 结语
    大一新生HTML期末作业 学生个人网页设计作业 HTML5响应式个人简历网站模板 web前端网页制作课作业
    尚硅谷大数据项目《在线教育之实时数仓》笔记007
    qemu简单安装虚拟机(vnc方式,CentOS7.9)
    從turtle海龜動畫 學習 Python - 高中彈性課程系列 10.2 藝術畫 Python 製作生成式藝術略覽
    黑马点评回顾 redis实现共享session
    数据集 | 语音合成音库助力机器人客服“声入人心 ”
    使用阿里云镜像加速pip命令的包安装
    Part-DB 配置流程
    数学建模 -- 层次分析法(AHP)
  • 原文地址:https://blog.csdn.net/echo_zhaowei/article/details/134467409
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号