码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • ES系列、Elasticsearch Suggester API(自动补全)


    1.概念

    1.1 补全api主要分为四类

    1. Term Suggester(纠错补全,输入错误的情况下补全正确的单词)
    2. Phrase Suggester(自动补全短语,输入一个单词补全整个短语)
    3. Completion Suggester(完成补全单词,输出如前半部分,补全整个单词)
    4. Context Suggester(上下文补全)

    整体效果类似百度搜索,如图:

    2. Completion suggester   自动补全 

    针对自动补全场景而设计的建议器。此场景下用户每输入一个字符的时候,就需要即时发送一次查询请求到后端查找匹配项,在用户输入速度较高的情况下对后端响应速度要求比较苛刻。因此实现上它和前面两个Suggester采用了不同的数据结构,索引并非通过倒排来完成,而是将analyze过的数据编码成FST和索引一起存放。对于一个open状态的索引,FST会被ES整个装载到内存里的,进行前缀查找速度极快。但是FST只能用于前缀查找,这也是Completion Suggester的局限所在。

    2.1建立索引

    1. put /book
    2. {
    3. "mappings": {
    4. "music" : {
    5. "properties" : {
    6. "suggest" : {
    7. "type" : "completion"
    8. },
    9. "title" : {
    10. "type": "keyword"
    11. }
    12. }
    13. }
    14. }
    15. }
    16. 注意,最终写入数据需要 /book/music

    2.2插入数据

    1. put /book/music/_doc/1
    2. {
    3. "suggest":"爱一个人好难"
    4. }
    5. put /book/music/_doc/2
    6. {
    7. "suggest":"爱一个人好难"
    8. }
    9. put /book/music/_doc/3
    10. {
    11. "suggest":"爱真的需要勇气"
    12. }

    2.3自动补全查询 

    示例1:查询建议根据前缀查询

    1. POST book/music/_search
    2. {
    3. "suggest": {
    4. "song-suggest" : {
    5. "prefix" : "爱",
    6. "completion" : {
    7. "field" : "suggest"
    8. }
    9. }
    10. }
    11. }

     示例1:查询建议根据前缀查询结果

    1. {
    2. "took": ,
    3. "timed_out": false,
    4. "_shards": {
    5. "total": ,
    6. "successful": ,
    7. "skipped": ,
    8. "failed":
    9. },
    10. "hits": {
    11. "total": ,
    12. "max_score": ,
    13. "hits": []
    14. },
    15. "suggest": {
    16. "song-suggest": [
    17. {
    18. "text": "te",
    19. "offset": ,
    20. "length": ,
    21. "options": [
    22. {
    23. "text": "爱一个人好难",
    24. "_index": "book",
    25. "_type": "music",
    26. "_id": "6Xu6mmUBYLvVFwGWpXeL",
    27. "_score": ,
    28. "_source": {
    29. "suggest": "爱一个人好难"
    30. }
    31. },
    32. {
    33. "text": "爱一个人好难",
    34. "_index": "book",
    35. "_type": "music",
    36. "_id": "6nu8mmUBYLvVFwGWSndC",
    37. "_score": ,
    38. "_source": {
    39. "suggest": "爱一个人好难"
    40. }
    41. },
    42. {
    43. "text": "爱真的需要勇气",
    44. "_index": "book",
    45. "_type": "music",
    46. "_id": "63u8mmUBYLvVFwGWZHdC",
    47. "_score": ,
    48. "_source": {
    49. "suggest": "爱真的需要勇气"
    50. }
    51. }
    52. ]
    53. }
    54. ]
    55. }
    56. }

    示例2:对建议查询结果去重 

    1. {
    2. "suggest": {
    3. "song-suggest" : {
    4. "prefix" : "爱",
    5. "completion" : {
    6. "field" : "suggest" ,
    7. "skip_duplicates": true
    8. }
    9. }
    10. }
    11. }

    本文部分参考:《ES系列十三、Elasticsearch Suggester API(自动补全)》 里面有整个四种补全的方式。

  • 相关阅读:
    通过ISO9001认证,如何实现质量体系有效性
    【香橙派】Orange pi AIpro开发板使用之一键部署springboot项目
    Photoshop图层混合模式公式(Unity,CG实现)
    Linux服务器端口不通处理方法及CentOS 78 防火墙操作命令
    TensorRT开发环境搭建
    龙芯推出兼容IE浏览器解决方案
    Aeraki 教程系列(八) | 如何将 Dubbo 服务接入到 Aeraki Mesh?
    POI操作Word组件.haiwei-poi-word(模板+数据)
    深入浅出学习透析Nginx服务器的基本原理和配置指南「负载均衡篇」
    ArcGIS Engine:报错无法嵌入互操作类型“ESRI.ArcGIS.Geometry.EnvelopeClass”。请改用适用的接口。
  • 原文地址:https://blog.csdn.net/yexiaomodemo/article/details/126437539
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | 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号