首发于 qwer后端开发笔记

Es搜索优化(五)-自动补齐/自动推荐/荐词

我在用 Elasticsearch 做搜索期间总共写了五篇大家可以关联着看,希望可以解决大家开发中遇到的一些问题

1. what

举例,我们使用Google的时候,Google会提示我们

image.png



2. why

3. how


3.1 基础分析


3.1 用redis实现

image.png


  1. 接受到用户输入的 关键词 ,查看是否是否存在与此 zset 中
  2. 如果关键词存在,则直接获取下标,如果不存在,则插入后,获取到下标
  3. 根据所获得的下标,然后进行获取此下标后面N个关键词
  4. 取出数据展示如下
image.png


3.2 用elasticsearch实现

Suggesters API 来实现这个功能

  1. Term Suggester(纠错补全,输入错误的情况下补全正确的单词)
  2. 这个建议是基于编辑距离,基于已经在数据库中的数据进行分词,然后分割出来术语
  3. 所有出来的结果有两种排序方式
    1. 第一种(score):首先按照分数,然后是文档出现的频率,然后是被搜索词本身
    2. 第二种(frequency): 首先按照文档出现的频率,然后是分数,然后是术语本身


  1. Phrase Suggester(自动补全短语,输入一个单词补全整个短语)
  2. 这个建议是基于编辑距离,基于已经在数据库中的数据进行分词,然后分割出来术语,但是会根据字符串之间的距离再次提示短语
  3. 同时具有纠错功能
  4. Completion Suggester(完成补全单词,输出如前半部分,补全整个单词)
  5. Context Suggester(上下文补全,可以基于Completion Suggester的基础上做)
  6. 可以在插入数据的时候,数据的字段打上特定的标签
  7. 然后做sugget搜索的时候,加一个搜索条件,这样的话,就会从特点的数据中进行搜索
  8. 标签支持两种:category 和 geo
    1. category:就一个或者多个字符串进行标记,比如对于食物,我们可以给一个类型为category 的标签,字段名是place_type,然后字段值是resturant,如果命中了对应的一个或者多个place_type,则可以提升分数
    2. geo: 地理上下文可以在索引时将一个或多个地理点与文档字段相关联。在查询时,如果建议在特定地理位置的一定距离内,则可以过滤和提升分数
  9. 我们前期选择 Completion Suggester 因为这个性能最好,他将数据保存在内存中的有限状态转移机中(FST)
  10. 后期如果需要优化,可以结合 Term Suggester ,Phrase Suggester, Context Suggester进行优化

3.2.1 建立对应的index(completion 实现)


3.2.2 进行相应的查询

curl -XPOST "localhost:9200/test_index/_doc/_search?pretty=true" -H 'content-type: application/json' --data '
{
    "suggest": {
        "suggest_1": {
            "text": "春节碰",
            "completion": {
                "field": "title",
        "skip_duplicates": true
            }
        }
    }
}
'

## response

{
  "took" : 2,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 0,
      "relation" : "eq"
    },
    "max_score" : null,
    "hits" : [ ]
  },
  "suggest" : {
    "suggest_1" : [
      {
        "text" : "春节碰",
        "offset" : 0,
        "length" : 3,
        "options" : [
          {
            "text" : "春节碰到自己的前女友怎么办?",
            "_index" : "test_index",
            "_type" : "_doc",
            "_id" : "eOZ-bX8BVW9cjfXV7UG_",
            "_score" : 1.0,
            "_source" : {
              "id" : 1,
              "title" : "春节碰到自己的前女友怎么办?",
              "content" : "如题",
              "status" : "1"
            }
          },
          {
            "text" : "春节碰到自己的前男友怎么办?",
            "_index" : "test_index",
            "_type" : "_doc",
            "_id" : "d-Z-bX8BVW9cjfXV7UGS",
            "_score" : 1.0,
            "_source" : {
              "id" : 1,
              "title" : "春节碰到自己的前男友怎么办?",
              "content" : "如题",
              "status" : "1"
            }
          },
          {
            "text" : "春节碰到自己的老师怎么办?",
            "_index" : "test_index",
            "_type" : "_doc",
            "_id" : "eeZ-bX8BVW9cjfXV7UHr",
            "_score" : 1.0,
            "_source" : {
              "id" : 1,
              "title" : "春节碰到自己的老师怎么办?",
              "content" : "如题",
              "status" : "1"
            }
          },
          {
            "text" : "春节碰到自己的老师怎么办?我应该打招呼吗?",
            "_index" : "test_index",
            "_type" : "_doc",
            "_id" : "euZ-bX8BVW9cjfXV7kEg",
            "_score" : 1.0,
            "_source" : {
              "id" : 1,
              "title" : "春节碰到自己的老师怎么办?我应该打招呼吗?",
              "content" : "如题",
              "status" : "1"
            }
          }
        ]
      }
    ]
  }
}


3.3.2 match phrase prefix query 实现


image.png

4. 参考链接

代做工资流水公司株洲办理对公流水南昌工资银行流水公司盐城入职流水查询保定购房银行流水杭州代办房贷工资流水大连转账银行流水查询宿迁代做流水佛山房贷工资流水 打印唐山银行对公流水打印曲靖做签证银行流水潮州做银行流水修改邢台制作公司流水兰州办企业对公流水德阳银行流水修改查询漳州工资证明制作潮州查询流水账单新乡查询工作收入证明郑州代开企业贷流水贵阳在职证明办理银川房贷银行流水 代办湘潭工资流水app截图开具厦门公司流水多少钱咸阳转账流水费用保定企业对公流水代办淮安薪资银行流水办理南阳工资流水单查询合肥代做工资流水账单开封办个人银行流水济南签证银行流水 图片济宁个人银行流水多少钱香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声卫健委通报少年有偿捐血浆16次猝死汪小菲曝离婚始末何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言男子被猫抓伤后确诊“猫抓病”周杰伦一审败诉网易中国拥有亿元资产的家庭达13.3万户315晚会后胖东来又人满为患了高校汽车撞人致3死16伤 司机系学生张家界的山上“长”满了韩国人?张立群任西安交通大学校长手机成瘾是影响睡眠质量重要因素网友洛杉矶偶遇贾玲“重生之我在北大当嫡校长”单亲妈妈陷入热恋 14岁儿子报警倪萍分享减重40斤方法杨倩无缘巴黎奥运考生莫言也上北大硕士复试名单了许家印被限制高消费奥巴马现身唐宁街 黑色着装引猜测专访95后高颜值猪保姆男孩8年未见母亲被告知被遗忘七年后宇文玥被薅头发捞上岸郑州一火锅店爆改成麻辣烫店西双版纳热带植物园回应蜉蝣大爆发沉迷短剧的人就像掉进了杀猪盘当地回应沈阳致3死车祸车主疑毒驾开除党籍5年后 原水城县长再被查凯特王妃现身!外出购物视频曝光初中生遭15人围殴自卫刺伤3人判无罪事业单位女子向同事水杯投不明物质男子被流浪猫绊倒 投喂者赔24万外国人感慨凌晨的中国很安全路边卖淀粉肠阿姨主动出示声明书胖东来员工每周单休无小长假王树国卸任西安交大校长 师生送别小米汽车超级工厂正式揭幕黑马情侣提车了妈妈回应孩子在校撞护栏坠楼校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变老人退休金被冒领16年 金额超20万西藏招商引资投资者子女可当地高考特朗普无法缴纳4.54亿美元罚金浙江一高校内汽车冲撞行人 多人受伤

代做工资流水公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化