[ElasticSearch]Suggest查询建议(自动补全纠错)
概述
搜索一般都会要求具有“搜索推荐”或者叫“搜索补全”的功能,即在用户输入搜索的过程中,进行自动补全或者纠错。以此来提高搜索文档的匹配精准度,进而提升用户的搜索体验,这就是Suggest。
四种Suggester
1 Term Suggester
Term Suggester: term suggester正如其名,只基于tokenizer之后的单个term去匹配建议词,并不会考虑多个term之间的关系,对给入的文本进行分词,为每个词进行模糊查询提供词项建议。(建议对搜索词进行长度控制,超过长度则不会进行TermSuggest,原因也是一般Term Suggester适用于单个词使用 把得分最高的推荐词进行返回代表纠错)
POST <index>/_search
{ "suggest": {"<suggest_name>": {"text": "<search_content>","term": {"suggest_mode": "<suggest_mode>","field": "<field_name>"}}}
}
2 Phrase Suggester
Phrase Suggester:phrase suggester和term suggester相比,对建议的文本会参考上下文,也就是一个句子的其他token,不只是单纯的token距离匹配,它可以基于共生和频率选出更好的建议。在term的基础上,会考量多个term之间的关系,比如是否同时出现在索引的原文里,相邻程度,以及词频等。
如果说term suggester建议处理单个词的纠错 那么Phrase Suggester就建议作为一整句话的纠错(返回值的suggest列表中返回的也是一整句话)
DELETE test
POST test/_bulk
{ "index" : { "_id":1} }
{"title": "lucene and elasticsearch"}
{ "index" : {"_id":2} }
{"title": "lucene and elasticsearhc"}
{ "index" : { "_id":3} }
{"title": "luceen and elasticsearch"}POST test/_search
GET test/_mapping
POST test/_search
{"suggest": {"text": "Luceen and elasticsearhc","simple_phrase": {"phrase": {"field": "title.trigram","max_errors": 2,"gram_size": 1,"confidence":0,"direct_generator": [{"field": "title.trigram","suggest_mode": "always"}],"highlight": {"pre_tag": "<em>","post_tag": "</em>"}}}}
}
3 completion suggester
自动补全,自动完成,支持三种查询【前缀查询(prefix)模糊查询(fuzzy)正则表达式查询(regex)】 ,主要针对的应用场景就是"Auto Completion"。 此场景下用户每输入一个字符的时候,就需要即时发送一次查询请求到后端查找匹配项,在用户输入速度较高的情况下对后端响应速度要求比较苛刻。因此实现上它和前面两个Suggester采用了不同的数据结构,索引并非通过倒排来完成,而是将analyze过的数据编码成FST和索引一起存放。对于一个open状态的索引,FST会被ES整个装载到内存里的,进行前缀查找速度极快。但是FST只能用于前缀查找,这也是Completion Suggester的局限所在。
DELETE suggest_carinfo
PUT suggest_carinfo
{"mappings": {"properties": {"title": {"type": "text","analyzer": "ik_max_word","fields": {"suggest": {"type": "completion","analyzer": "ik_max_word"}}},"content": {"type": "text","analyzer": "ik_max_word"}}}
}POST _bulk
{"index":{"_index":"suggest_carinfo","_id":1}}
{"title":"宝马X5 两万公里准新车","content":"这里是宝马X5图文描述"}
{"index":{"_index":"suggest_carinfo","_id":2}}
{"title":"宝马5系","content":"这里是奥迪A6图文描述"}
{"index":{"_index":"suggest_carinfo","_id":3}}
{"title":"宝马3系","content":"这里是奔驰图文描述"}
{"index":{"_index":"suggest_carinfo","_id":4}}
{"title":"奥迪Q5 两万公里准新车","content":"这里是宝马X5图文描述"}
{"index":{"_index":"suggest_carinfo","_id":5}}
{"title":"奥迪A6 无敌车况","content":"这里是奥迪A6图文描述"}
{"index":{"_index":"suggest_carinfo","_id":6}}
{"title":"奥迪双钻","content":"这里是奔驰图文描述"}
{"index":{"_index":"suggest_carinfo","_id":7}}
{"title":"奔驰AMG 两万公里准新车","content":"这里是宝马X5图文描述"}
{"index":{"_index":"suggest_carinfo","_id":8}}
{"title":"奔驰大G 无敌车况","content":"这里是奥迪A6图文描述"}
{"index":{"_index":"suggest_carinfo","_id":9}}
{"title":"奔驰C260","content":"这里是奔驰图文描述"}
{"index":{"_index":"suggest_carinfo","_id":10}}
{"title":"nir奔驰C260","content":"这里是奔驰图文描述"}GET suggest_carinfo/_search?pretty
{"suggest": {"car_suggest": {"prefix": "奥迪","completion": {"field": "title.suggest"}}}
}
4 context suggester
完成建议者会考虑索引中的所有文档,但是通常来说,我们在进行智能推荐的时候最好通过某些条件过滤,并且有可能会针对某些特性提升权重。
# context suggester
# 定义一个名为 place_type 的类别上下文,其中类别必须与建议一起发送。
# 定义一个名为 location 的地理上下文,类别必须与建议一起发送
DELETE place
PUT place
{"mappings": {"properties": {"suggest": {"type": "completion","contexts": [{"name": "place_type","type": "category"},{"name": "location","type": "geo","precision": 4}]}}}
}PUT place/_doc/1
{"suggest": {"input": [ "timmy's", "starbucks", "dunkin donuts" ],"contexts": {"place_type": [ "cafe", "food" ] }}
}
PUT place/_doc/2
{"suggest": {"input": [ "monkey", "timmy's", "Lamborghini" ],"contexts": {"place_type": [ "money"] }}
}
相关文章:
[ElasticSearch]Suggest查询建议(自动补全纠错)
概述 搜索一般都会要求具有“搜索推荐”或者叫“搜索补全”的功能,即在用户输入搜索的过程中,进行自动补全或者纠错。以此来提高搜索文档的匹配精准度,进而提升用户的搜索体验,这就是Suggest。 四种Suggester 1 Term Suggester…...
GPT-4.1 提示词使用指南
GPT-4.1 提示词使用指南 参考:https://cookbook.openai.com/examples/gpt4-1_prompting_guide 为什么要关注 GPT-4.1 提示词使用指南? GPT-4.1 比其前代模型 GPT-4o 更倾向于严格跟随指令,而不是像 GPT-4o 那样更自由地推断用户和系统提示…...
es6面试常见问题╮(╯▽╰)╭
ES6(ECMAScript 2015)的一些常见面试问题,涵盖了变量声明、箭头函数、模板字符串、解构赋值、模块化、类、Promise、生成器等关键特性。有些面试就是问问,对老程序员面试其实不问这么多╮(╯▽╰)╭ 文章目录 **1. 变量声明****1.1 `let` 和 `const` 与 `var` 的区别是什么…...
Xenomai 如何实现 <10μs 级抖动控制
1. 抖动(Jitter)的定义与重要性 1.1 什么是抖动? 在实时控制系统中,抖动(Jitter)指任务实际执行时间与预期周期时间的偏差。例如: • 设定一个任务每 100μs 运行一次,但实际运行时间…...
前端基础常见的算法
你整理的这些前端常见算法知识点挺实用的,适合复习或面试准备。下面我帮你稍微整理美化一下格式,并补充一点细节,让内容更清晰易读: 1. 排序算法 冒泡排序(Bubble Sort) 原理:通过重复比较相邻元…...
RPA机器人技术原理初探
RPA(Robotic Process Automation,机器人流程自动化)通过模拟人类操作界面元素来实现自动化任务,其技术原理可分为以下核心模块: 一、基础技术架构 界面元素识别技术 选择器(Selector)引擎&#…...
AWS CloudFront加速S3配置跨域
1、点击分配 源我们就选择S3–>选择我们要加速的S3存储桶 2、创建OAC访问方式 在我们的来源访问处–>来源访问控制设置(推荐)–>选择创建新的OAC(Create new OAC)–>自定义名字按默认选项保存–>选择刚刚新创建的OAC 3、选择查看器的配置 根据具体情况&#x…...
58.最后一个单词的长度
目录 一、问题描述 二、解题思路 三、代码 四、复杂度分析 一、问题描述 给你一个字符串 s,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。 二、解题思…...
leetcode_344.反转字符串_java
344. 反转字符串 1、题目 编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。 不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。 示例 1: 输入:…...
Android --- FrameWork 入门:极速上手AOSP
文章目录 一、硬件要求二、虚拟机安装三、开发环境搭建四、下载编译源码 一、硬件要求 CPU不低于6核心,建议8核及以上 内存不低于32G,建议64G 存储空间不低于500G,建议 1TB SSD 二、虚拟机安装 1.下载ubuntu,官网网址如下: releases.ubuntu.com/focal…...
“大湾区珠宝艺境花园”璀璨绽放第五届消博会
2025年4月13日,第五届中国国际消费品博览会(以下简称"消博会")重要主题活动——《大湾区珠宝艺境花园》启动仪式在海南国际会展中心2号馆隆重举行。由广东省金银珠宝玉器业厂商会组织带领粤港澳大湾区优秀珠宝品牌,以“…...
Spring Boot系列之使用Arthas Tunnel Server 进行远程调试实践
Spring Boot系列之使用Arthas Tunnel Server 进行远程调试实践 前言 在开发和运维 Java 应用的过程中,远程诊断和调试是一个不可或缺的需求。尤其是当生产环境出现问题时,能够快速定位并解决这些问题至关重要。Arthas 是阿里巴巴开源的一款强大的 Java…...
ILGPU的核心功能使用详解
什么是ILGPU? ILGPU 是一种用于高性能 GPU 程序的新型 JIT(即时)编译器 (也称为 kernels)编写的 .基于 Net 的语言。ILGPU 完全 用 C# 编写,没有任何原生依赖项,允许您编写 GPU 真正可移植的程序。…...
Ubuntu服务器日志满audit:backlog limit exceeded了会报错解决方案-Linux 审计系统 (auditd) 工具
auditd 是 Linux 系统中的审计守护进程,负责收集、记录和监控系统安全相关事件。以下是相关工具及其功能: 核心组件 auditd - 审计守护进程 系统的审计服务主程序 收集系统调用信息并写入日志文件 通常存储在 /var/log/audit/audit.log auditctl - 审计控…...
数据加载与保存
通用方式 SparkSQL提供了通用的数据加载方式,使用spark.read.loa方法,并可通过format指定数据类型(如csv、jdbc、json、orc、parquet、textFile)。 load方法后需传入数据路径(针对csv、jdbc、json、orc、parquet、…...
TODO!! IM项目2
感觉似乎部署好了 真不容易 mysql、redis、 rocketmq(nameserver、broker)、nginx 看代码里是mybatisplus、netty->protobuf协议 现在还发不出去消息 每个密码都要改对 现在可以发消息了但不能at 房间成员也没有 broker内存不够? 从…...
Android ImageView 使用详解
文章目录 一、基本使用1. XML 中声明 ImageView2. Java/Kotlin 中设置图片 二、图片缩放类型 (scaleType)三、加载网络图片1. 使用 Glide (推荐)2. 使用 Picasso 四、高级功能1. 圆形图片2. 圆角图片3. 图片点击缩放动画 五、性能优化六、常见问题解决 ImageView 是 Android 中…...
工资管理系统的主要功能有哪些
工资管理系统通过自动化薪资计算、税务处理、员工数据管理、报表生成等功能,极大地提升了薪资发放的效率和准确性。在传统的人工薪资管理中,HR人员需要手动计算每位员工的薪资,并确保符合税务要求,极易出错且耗时。而现代工资管理…...
WordPiece 详解与示例
WordPiece详解 1. 定义与背景 WordPiece 是一种子词分词算法,由谷歌于2012年提出,最初用于语音搜索系统,后广泛应用于机器翻译和BERT等预训练模型。其核心思想是将单词拆分为更小的子词单元(如词根、前缀/后缀),从而解决传统分词方法面临的词汇表过大和未知词(OOV)处…...
【LeetCode基础算法】滑动窗口与双指针
定长滑动窗口 总结:入-更新-出。 入:下标为 i 的元素进入窗口,更新相关统计量。如果 i<k−1 则重复第一步。 更新:更新答案。一般是更新最大值/最小值。 出:下标为 i−k1 的元素离开窗口,更新相关统计量…...
日本Shopify 3月数据:家居品类销售额激增120%!
2024年第一季度末,电商平台运营商Shopify发布了3月份的最新销售数据,引发业界高度关注。据最新数据显示,日本市场家居品类销售在3月份实现了惊人的增长,同比激增120%,成为该区域增速最快的类目。这一变化不仅映射出日本…...
C语言多进程素数计算
题目描述: 以下代码实现了一个多进程素数计算程序,通过fork()函数创建子进程来并行计算指定范围内的素数。请仔细阅读代码并回答以下问题。 #include "stdio.h" #include "unistd.h" #include <sys/types.h> #include "…...
链表知识回顾
类型:单链表,双链表、循环链表 存储:在内存中不是连续存储 删除操作:即让c的指针指向e即可,无需释放d,因为java中又内存回收机制 添加节点: 链表的构造函数 public class ListNode {// 结点…...
数据库勒索病毒威胁升级:企业数据安全防线如何用安当RDM组件重构
摘要:2025年Q1全球数据库勒索攻击量同比激增101.8%,Cl0p、Akira等团伙通过边缘设备漏洞渗透企业核心系统,制造业、金融业等关键领域面临数据加密与业务停摆双重危机。本文深度解析勒索病毒对数据库的五大毁灭性影响,结合安当RDM防…...
50%时效提升!中巴新航线如何重构ebay跨境电商物流成本?
50%时效提升!中巴新航线如何重构eBay跨境电商物流成本? 近年,拉美市场逐步升温,特别是巴西,已成为中国跨境卖家争相布局的新蓝海市场。而随着eBay大力拓展拉美板块,更多卖家开始将目光投向这个人口超2亿、…...
自建 eSIM RSP 服务指南
一、 自建 eSIM RSP 服务的必要性评估 在决定是否自建 RSP(远程 SIM 配置)服务时,企业需要全面了解其带来的利弊。以下是核心要点: 1. GSMA 安全认证 (SAS-SM) 的重要性 目的: 确保 RSP 服务符合全球移动网络运营商 (MNO) 对安…...
TensorRT模型部署剪枝
TensorRT模型部署剪枝 本文属于学习笔记,在重点章节或代码位置加入个人理解,欢迎批评指正! 参考: CUDA与TensorRT部署部署实战第四章 一. Pruning 学习目标 理解什么是模型剪枝模型剪枝的分类,以及各类剪枝的利弊都…...
Servlet 线程安全与并发编程深度解析
Servlet 线程安全与并发编程深度解析 一、Servlet 线程安全机制与风险场景 1.1 Servlet 容器工作原理 单实例多线程模型:每个Servlet在容器中只有一个实例,通过线程池处理并发请求请求处理流程: 接收HTTP请求创建HttpServletRequest和HttpS…...
C++学习:六个月从基础到就业——面向对象编程:封装、继承与多态
C学习:六个月从基础到就业——面向对象编程:封装、继承与多态 本文是我C学习之旅系列的第九篇技术文章,主要讨论C中面向对象编程的三大核心特性:封装、继承与多态。这些概念是理解和应用面向对象设计的关键。查看完整系列目录了解…...
光谱相机的成像方式
光谱相机的成像方式决定了其如何获取物体的空间与光谱信息,核心在于分光技术与扫描模式的结合。以下是主要成像方式的分类解析: 一、滤光片切换型 1. 滤光片轮(Filter Wheel) 原理:通过旋转装有多个窄带…...
Excel 中让表格内容自适应列宽和行高
Excel 中让表格内容自适应列宽和行高 目录 Excel 中让表格内容自适应列宽和行高自适应列宽自适应行高在Excel中让表格内容自适应列宽和行高,可参考以下操作: 自适应列宽 方法一:手动调整 选中需要调整列宽的列(如果是整个表格,可点击表格左上角行号和列号交叉处的三角形全…...
android rtsp 拉流h264 h265,解码nv12转码nv21耗时卡顿问题及ffmpeg优化
一、 背景介绍及问题概述 项目需求需要在rk3568开发板上面,通过rtsp协议拉流的形式获取摄像头预览,然后进行人脸识别 姿态识别等后续其它操作。由于rtsp协议一般使用h.264 h265视频编码格式(也叫 AVC 和 HEVC)是不能直接用于后续处…...
Day(21)--网络编程
网络编程 在网络通信协议下,不同计算机上运行的程序,进行的数据传输 应用场景:即使通信、网友对战、金融证券等等,不管是什么场景,都是计算机和计算机之间通过网络进行的数据传输 java.net 常见的软件架构 C/S&am…...
Android主流播放器功能详解
Android主流播放器功能详解 前言 本文将深入介绍Android三大主流播放框架(ijkplayer、ExoPlayer和MediaPlayer)的功能特性和实战应用,帮助你选择合适的播放框架并掌握其使用方法。 三大播放框架概述 播放框架开发方特点适用场景MediaPlayerAndroid官方简单易用,系统内置…...
牟乃夏《ArcGIS Engine地理信息系统开发教程》学习笔记2
目录 一、ArcGIS Engine概述 1、 定义 2、 核心功能 3、 与ArcObjects(AO)的关系 二、开发环境搭建 1、 开发工具要求 2、 关键步骤 三、 ArcGIS Engine核心组件 1、 对象模型 2、 类库分类 四、 第一个AE应用程序(C#示例…...
语音合成(TTS)从零搭建一个完整的TTS系统-第一节-效果演示
一、概述 语音合成又叫文字转语音(TTS-text to speech ),本专题我们记录从零搭建一个完整的语音合成系统,包括文本前端、声学模型和声码器,从模型训练到系统的工程化实现,模型可以部署在手机等嵌入式设备上…...
文章记单词 | 第35篇(六级)
一,单词释义 across [əˈkrɒs] prep. 从一边到另一边;横过;在… 对面;遍及;在… 上;跨越;adv. 从一边到另一边;横过;宽;从… 的一边到另一边;在…...
MySQL Binlog 数据恢复总结
🌲 总入口:你想恢复什么? 恢复类型 ├── 表结构 表数据(整张表被 DROP) │ ├── Binlog 中包含 CREATE TABLE │ │ └── ✅ 直接用 mysqlbinlog 提取建表 数据语句,回放即可 │ └── B…...
【Linux】进程基础入门指南(下)
> 🍃 本系列为Linux的内容,如果感兴趣,欢迎订阅🚩 > 🎊个人主页:【小编的个人主页】 >小编将在这里分享学习Linux的心路历程✨和知识分享🔍 >如果本篇文章有不足,还请多多包涵&a…...
NoETL×大模型:Aloudata重构数据智能新范式,开启Chat BI新落地之道
在当今数据驱动的时代,企业对于高效、智能的数据处理与分析需求日益增长。随着大模型的兴起,如DeepSeek等,数据智能领域正经历着前所未有的变革。 Aloudata大应科技创始人&CEO周卫林表示,企业的核心竞争力包括人才壁垒、技术…...
算法题(126):前缀和
审题: 本题需要我们将题目给出的数组的数据的[l,r]范围内的数据和打印 思路: 方法一:前缀和 前缀和的思想就是预处理数据,通过空间换时间的方式提高代码效率 第一步:利用数组f将前缀和记录下来,f[i]表示索引…...
选择排序(简单选择排序、堆排序)
简单选择排序(Selection Sort) 1. 算法思想 它通过多次遍历数组,每次从未排序部分中选择最小(或最大)的元素,将其放到已排序部分的末尾(或开头),直到整个数组有序。 2.…...
【JavaEE】Spring AOP的注解实现
目录 一、AOP 与 Spring AOP二、Spring AOP简单实现三、详解Spring AOP3.1 Spring AOP 核心概念3.1.1 切点(Pointcut)3.1.2 连接点(Join Point)3.1.3 通知(Advice)3.1.4 切面(Aspect)…...
【天外之物】加速度与速度的单位向量的内积得到加速度在切向向量上的值
切向加速度的标量值 a T a_T aT 正是加速度矢量 a \mathbf{a} a 与单位切矢量 T ^ \mathbf{\hat{T}} T^ 的内积(点积)。 1. 数学定义 设物体的速度为 v \mathbf{v} v,加速度为 a \mathbf{a} a,单位切矢量为 T ^ \mathbf{…...
eBay 2025春季财报揭示跨境电商新蓝海:五大隐秘品类引爆增长密码
核心数据速览 2024年第一季度,eBay全球商品交易总额(GMV)达255亿美元,同比增长5%。这一增长不仅源于季节性消费回暖,更折射出跨境电商行业在能源转型、供应链重构及消费需求升级中的结构性变革。透过数据ÿ…...
兔子桌面tv版下载-兔子桌面tv版官方app免费下载安装
兔子桌面 TV 版是一款专为智能电视和机顶盒设计的轻量化桌面应用,其界面采用大图标、大字体设计,支持自由调整应用顺序,将常用的影视、游戏 App 置顶,还可通过主题市场下载动态背景,满足用户对电视界面的个性化需求。 …...
绿算轻舟系列FPGA加速卡:驱动数字化转型的核心动力【2】
工业与医疗:精准化的幕后推手 在工业4.0与智慧医疗领域,绿算轻舟FPGA加速卡通过实时信号处理与高精度控制,推动关键场景的技术升级。 工业自动化:在机器视觉质检中,实现亚像素级缺陷检测,产线检测速度大幅…...
ubuntu1804服务器开启ftp,局域网共享特定文件给匿名用户
要在 Ubuntu 18.04 上设置一个 FTP 服务器,满足以下要求: 允许匿名登录(无需账号密码)。指定分享特定目录下的文件。只允许只读下载。 可以使用 vsftpd(Very Secure FTP Daemon)来实现。以下是详细步骤&a…...
k8s中pod报错 FailedCreatePodSandBox
问题现象: 创建容器时出现一下情况 而且删掉控制器的时候pod还会卡住 解决: 将calico的pod重新删掉。其中有1个控制器pod以及3个node pod 删掉后,大概10来秒就重新创建完成了。 然后现在在使用kubectl apply -f 文件.yaml 就可以正常创…...
请详细说明下面训练阶段的差别: Supervised Fine-Tuning、Reward Modeling、PPO、DPO、KTO、Pre-Training
目录 🔧 一、训练阶段总体流程(从底层到上层) 🧠 1. Pre-Training(预训练) 📌 目的: 📚 数据: ⚙️ 方法: 💡 举个例子…...