• 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(自动补全)》 里面有整个四种补全的方式。

  • 相关阅读:
    例39:使用List控件
    职业规划,什么是职业兴趣 - 我喜欢做什么?
    shell SNAT与DNAT
    【R语言】【1】初学R语言语法使用Rstudio编辑
    深度学习-梯度下降算法-NLP(五)
    面试2:通用能力
    VisualSFM的配置与使用 & MeshLab的网格生成与纹理添加
    模型评估与改进:交叉验证
    Mysql 关于count()函数的记录
    npm run serve与npm run dev的区别
  • 原文地址:https://blog.csdn.net/yexiaomodemo/article/details/126437539