es 搜索推荐:Suggest

2023-11-13

搜索推荐:Suggest

概述

搜索一般都会要求具有“搜索推荐”或者叫“搜索补全”的功能,即在用户输入搜索的过程中,进行自动补全或者纠错。以此来提高搜索文档的匹配精准度,进而提升用户的搜索体验,这就是Suggest。

四种Suggester
  • term suggester:term suggester正如其名,只基于tokenizer之后的单个term去匹配建议词,并不会考虑多个term之间的关系

    POST <index>/_search
    { 
      "suggest": {
        "<suggest_name>": {
          "text": "<search_content>",
          "term": {
            "suggest_mode": "<suggest_mode>",
            "field": "<field_name>"
          }
        }
      }
    }
    
    Options:
    • text:用户搜索的文本
    • field:要从哪个字段选取推荐数据
    • analyzer:使用哪种分词器
    • size:每个建议返回的最大结果数
    • sort:如何按照提示词项排序,参数值只可以是以下两个枚举:
      • score:分数>词频>词项本身
      • frequency:词频>分数>词项本身
    • suggest_mode:搜索推荐的推荐模式,参数值亦是枚举:
      • missing:默认值,仅为不在索引中的词项生成建议词
      • popular:仅返回与搜索词文档词频或文档词频更高的建议词
      • always:根据 建议文本中的词项 推荐 任何匹配的建议词
    • max_edits:可以具有最大偏移距离候选建议以便被认为是建议。只能是1到2之间的值。任何其他值都将导致引发错误的请求错误。默认为2
    • prefix_length:前缀匹配的时候,必须满足的最少字符
    • min_word_length:最少包含的单词数量
    • min_doc_freq:最少的文档频率
    • max_term_freq:最大的词频
  • phrase suggester:phrase suggester和term suggester相比,对建议的文本会参考上下文,也就是一个句子的其他token,不只是单纯的token距离匹配,它可以基于共生和频率选出更好的建议。

    Options:

    • real_word_error_likelihood: 此选项的默认值为 0.95。此选项告诉 Elasticsearch 索引中 5% 的术语拼写错误。这意味着随着这个参数的值越来越低,Elasticsearch 会将越来越多存在于索引中的术语视为拼写错误,即使它们是正确的
    • max_errors:为了形成更正,最多被认为是拼写错误的术语的最大百分比。默认值为 1
    • confidence:默认值为 1.0,最大值也是。该值充当与建议分数相关的阈值。只有得分超过此值的建议才会显示。例如,置信度为 1.0 只会返回得分高于输入短语的建议
    • collate:告诉 Elasticsearch 根据指定的查询检查每个建议,以修剪索引中不存在匹配文档的建议。在这种情况下,它是一个匹配查询。由于此查询是模板查询,因此搜索查询是当前建议,位于查询中的参数下。可以在查询下的“params”对象中添加更多字段。同样,当参数“prune”设置为true时,我们将在响应中增加一个字段“collate_match”,指示建议结果中是否存在所有更正关键字的匹配
    • direct_generator:phrase suggester使用候选生成器生成给定文本中每个项可能的项的列表。单个候选生成器类似于为文本中的每个单独的调用term suggester。生成器的输出随后与建议候选项中的候选项结合打分。目前只支持一种候选生成器,即direct_generator。建议API接受密钥直接生成器下的生成器列表;列表中的每个生成器都按原始文本中的每个项调用。
  • completion suggester:自动补全,自动完成,支持三种查询【前缀查询(prefix)模糊查询(fuzzy)正则表达式查询(regex)】 ,主要针对的应用场景就是"Auto Completion"。 此场景下用户每输入一个字符的时候,就需要即时发送一次查询请求到后端查找匹配项,在用户输入速度较高的情况下对后端响应速度要求比较苛刻。因此实现上它和前面两个Suggester采用了不同的数据结构,索引并非通过倒排来完成,而是将analyze过的数据编码成FST和索引一起存放。对于一个open状态的索引,FST会被ES整个装载到内存里的,进行前缀查找速度极快。但是FST只能用于前缀查找,这也是Completion Suggester的局限所在。

    • completion:es的一种特有类型,专门为suggest提供,基于内存,性能很高。
    • prefix query:基于前缀查询的搜索提示,是最常用的一种搜索推荐查询。
      • prefix:客户端搜索词
      • field:建议词字段
      • size:需要返回的建议词数量(默认5)
      • skip_duplicates:是否过滤掉重复建议,默认false
    • fuzzy query
      • fuzziness:允许的偏移量,默认auto
      • transpositions:如果设置为true,则换位计为一次更改而不是两次更改,默认为true。
      • min_length:返回模糊建议之前的最小输入长度,默认 3
      • prefix_length:输入的最小长度(不检查模糊替代项)默认为 1
      • unicode_aware:如果为true,则所有度量(如模糊编辑距离,换位和长度)均以Unicode代码点而不是以字节为单位。这比原始字节略慢,因此默认情况下将其设置为false。
    • regex query:可以用正则表示前缀,不建议使用
  • context suggester:完成建议者会考虑索引中的所有文档,但是通常来说,我们在进行智能推荐的时候最好通过某些条件过滤,并且有可能会针对某些特性提升权重。

    • contexts:上下文对象,可以定义多个
      • name:context的名字,用于区分同一个索引中不同的context对象。需要在查询的时候指定当前name
      • type:context对象的类型,目前支持两种:category和geo,分别用于对suggest item分类和指定地理位置。
      • boost:权重值,用于提升排名
    • path:如果没有path,相当于在PUT数据的时候需要指定context.name字段,如果在Mapping中指定了path,在PUT数据的时候就不需要了,因为 Mapping是一次性的,而PUT数据是频繁操作,这样就简化了代码。这段解释有木有很牛逼,网上搜到的都是官方文档的翻译,觉悟雷同。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

es 搜索推荐:Suggest 的相关文章

随机推荐

  • 前端面试题总结----

    1 基础 1 1 性能优化 图片压缩 小图使用base64 数据缓存 避免重复请求 合理使用标签 避免创建无用的DOM结构 减少DOM操作 减少重排 尽可能重绘 避免空的src或者href值 启用 gzip 压缩 css 放顶部 js 放底
  • LTE中扫频及小区搜索

    2 1 扫频 2 1 1 概述 在指定频点 小区或者候补频点 小区搜索失败或者这些信息不存在时 会进行全频 段扫描 搜索 UE 能力支持频段范围内存在的所有小区 物理层会将 RRC 下发的扫描 频段分成单位 100KHz 的小频段进行扫描
  • 使用Eclipse创建一个简单的servlet项目

    一 通过File gt new gt others找到Dynamic Web project 创建一个动态的web项目 二 配置项目 再找个位置配置你下载的Tomcat的版本 点击next Tomcat存放的位置 本地JRE 点击finis
  • 解决数据库连接时2059 - Authentication plugin 'caching_sha2_password' cannot be loaded报错

    问题如下 在Navicat里面连接数据库时直接就出现报错2059 Authentication plugin caching sha2 password cannot be loaded 从错误信息可知caching sha2 passwo
  • 隐藏手机下方的底部导航条NavigationBar

    需知 在现在的Android项目中 为了布局适配 也为了界面看起来更加简洁大气 App保留了头部标题栏 但是下方的NavigationBar却有点多余 不过当然 因为手机按键很少的缘故 若是没有NavigationBar的话 恐怕就连退出都
  • WF项目问题总结

    1 后台接口对接时 参数传递方式 urlcode 是一种编码方式 就是把http请求串的url 进行urlcode的编码 让httpserver 可以识别 不至于http的client server 之前出现乱码或者误解 例如 Conten
  • 【LeetCode每日一题】5. 最长回文子串

    题目 给你一个字符串 s 找到 s 中最长的回文子串 示例 1 输入 s babad 输出 bab 解释 aba 同样是符合题意的答案 示例 2 示例 2 输入 s cbbd 输出 bb 示例 3 输入 s a 输出 a 示例 4 输入 s
  • Python零基础学习

    大家好 我是王某人 一 写在前面 前几天在Python技术交流群有个小伙伴分享一个使用Python画出太极阴阳八卦图的代码 这里拿出来给大家分享下 一起学习下 不过这里他的代码是有点问题的 不过不慌 下面给出了解答 二 解决过程 下面给出了
  • SSL/TLS协议交互流程分析

    本文参考 SSL TLS协议运行机制的概述 tls运行机制 这里不细说 建议细看 HTTPS与TLS The Transport Layer Security TLS Protocol v1 2 ssl tls基础介绍 SSL Secure
  • 2021PMP冲刺题,敏捷题目摘录

    1 单选 在每日站会期间 开发人员提出了一个影响产品质量并需要解决方案的问题 项目经理应该做什么 During the daily stand up the developer raises a problem that affects p
  • JZ15 二进制中1的个数

    输入一个整数 n 输出该数32位二进制表示中1的个数 其中负数用补码表示 数据范围 2 31 lt n lt 2 31 1 231 lt n lt 231 1 即范围为 2147483648 lt n lt 2147483647 21474
  • 毕业设计记录-matlab自动生成并标注时频图数据集

    文章目录 2022 1 8日的记录 2022 1 8日的记录 陆陆续续几天 玩中带做终于是写好了一个基本的雏形 以后想往里面添加东西就好添了 首先是文件功能描述 caogao caogao 草稿 写程序调试代码的地方 CreateSigna
  • openssl使用错误"error: storage size of 'ctx' isn't known"

    前言 SSL是Secure Sockets Layer 安全套接层协议 的缩写 openssl是一套开源的库 以便使用者进行安全通信 避免窃听 识别身份 其中 ssl的HMAC是计算MAC的一种方法 有密钥参与计算 不采用HASH算法 对数
  • Python学习笔记(浙大MOOC)

    Python学习笔记 浙大MOOC Python 条件语句 循环语句 while语句 for语句 举例 异常处理 集合 add 和 remove min max len 和sum set 集合操作 字典 简单举例 相关函数 函数的定义与调用
  • HDFS权限

    HDFS的权限管理是被用户最常问到的问题之一 HDFS实现了一个和POSIX系统相似的文件和目录的权限模型 同时还支持POSIX ACLs规范 因为POSIX ACLs自己就比较复杂 还改变了一些传统POSIX权限体系的语义 所以大部分用户
  • python连接db2

    在python2 6下连接db2 步骤 1 安装python2 6 注 目前db2的驱动还不支持2 7 2 安装setuptools 下载地址http pypi python org pypi setuptools 3 设置环境变量path
  • python时间处理(三)pandas.to_datetime

    前两篇内容讲了两个单独的python库函数 今天带大家认识一个常用的工具 pandas to datetime 它是pandas库的一个方法 pandas库想必大家非常熟悉了 这里不再多说 这个方法的实用性在于 当需要批量处理时间数据时 无
  • df 命令

    NAME df report file system disk space usage SYNOPSIS df OPTION FILE 参数 a all 列出包括BLOCK为0的文件系统 block size SIZE use SIZE b
  • click.stop 阻止事件冒泡

    click 和 click stop 都是事件修饰符 用于处理鼠标点击事件 它们的区别在于 click 修饰符用于监听鼠标点击事件 并触发相应的处理函数 如果在处理函数中使用了 event preventDefault 则会阻止默认的行为
  • es 搜索推荐:Suggest

    搜索推荐 Suggest 概述 搜索一般都会要求具有 搜索推荐 或者叫 搜索补全 的功能 即在用户输入搜索的过程中 进行自动补全或者纠错 以此来提高搜索文档的匹配精准度 进而提升用户的搜索体验 这就是Suggest 四种Suggester