ES 模糊查询 wildcard 的替代方案探索

news2024/9/19 11:27:13

一、Wildcard 概述

Wildcard 是一种支持通配符的模糊检索方式。在 Elasticsearch 中,它使用星号 * 代表零个或多个字符,问号 ? 代表单个字符。

其使用方式多样,例如可以通过 {"wildcard": {"field_name": "value"}} 的形式进行查询。适用场景通常包括召回率要求高的业务场景,当基于分词的全文检索无法满足需求,如基础词库不完备或分词粒度不精确时,Wildcard 可以发挥作用。

然而,Wildcard 也存在一些可能的风险和局限性。从性能角度看,它可能会增加查找匹配项所需的迭代次数,降低搜索性能。尤其当通配符位于检索字段的开头,或者输入的字符串长度过长时,可能导致执行速度极慢,甚至报错。此外,若对用户输入的字符串长度不做限制,可能会造成 CPU 使用率过高、集群宕机等严重后果。

在适用范围上,Wildcard 也有一定的局限性。例如,它不支持依赖于单词位置的查询,如短语查询,并且运行 wildcard 查询时,将忽略任何重写参数,得分总是一个恒定的分数。

二、替代方案

(一)Ngram 分词优化

Ngram 分词通过更细粒度的切分方式来提高数据召回。在配置方面,我们可以设置 min_gram 和 max_gram 参数来控制分词的长度范围。例如,将 min_gram 设置为 1 ,max_gram 设置为 3 ,可以对输入文本进行更细致的切分。在使用时,需要在创建索引或更新字段类型时进行相应配置,指定分析器为 ngram_analyzer 。这样,在搜索时就能更精准地匹配用户输入的模糊查询条件,提高召回效果。

(二)Match_phrase 结合 Ngram

将 match_phrase 与 Ngram 分词相结合,可以进一步增强模糊查询效果。当用户输入模糊查询条件时,先通过 Ngram 分词将查询条件切分成多个词项,然后 match_phrase 会确保这些词项在文档中的顺序一致,从而更准确地匹配用户的意图。例如,对于输入的 “quick fox”,Ngram 分词可能会得到 “qui”“uic” 等词项,match_phrase 会在文档中查找这些词项且顺序一致的部分,提高查询的准确性和相关性。

(三)Wildcard 字段类型

ES 7.9 版本引入的 wildcard 字段类型为模糊查询提供了新的解决方案。其使用方式较为简单,先定义一个 wildcard 类型的字段,如 PUT my-index-000001{"mappings": {"properties": {"my_wildcard": {"type": "wildcard"}}}} ,然后写入文档,最后通过类似 GET my-index-000001/_search{"query": {"wildcard": {"my_wildcard": "*quite*lengthy"}}} 的查询语句进行搜索。

其原理在于使用了两种数据结构来加速通配符和正则表达式搜索,一是字符串中所有 3 个字符序列的 n-gram 索引,二是完整原始文档值的 “二进制 doc value” 存储。

这种新的字段类型具有明显的优势,在空间大小上与原索引相差不大,而在查询效率方面,对于区分度低的模糊查询场景,优化效率约为之前的 1/3 ,对于区分度高的场景,优化效率约为之前的 1/15 ,显著提升了模糊查询的性能。

三、方案对比与选择

(一)优势对比

  • Ngram 分词优化:优势在于能实现更细粒度的切分,从而提高数据召回率。尤其适用于对召回精度要求较高,且基础词库不完善的情况。但可能会增加索引大小和计算成本。
  • Match_phrase 结合 Ngram:将顺序匹配和细粒度切分相结合,能够更准确地理解用户意图,提高查询的准确性和相关性。不过配置和使用相对复杂。
  • Wildcard 字段类型:新的字段类型显著提升了模糊查询的性能,尤其是在区分度不同的场景下均有优化。使用方式相对简单,对空间大小影响较小。

(二)适用情况

  • 当数据量较大,对召回率要求高,但对查询准确性要求相对较低时,可优先选择 Ngram 分词优化。
  • 对于需要精准理解用户输入意图,且对查询准确性和相关性要求极高的场景,Match_phrase 结合 Ngram 更为合适。
  • 若注重查询性能的提升,同时希望使用方式简单,且对空间影响不大,Wildcard 字段类型是较好的选择。

在实际应用中,应根据具体的业务需求、数据特点和性能要求,综合考虑各方案的优势和适用情况,选择最适合的替代方案。

四、实践案例

假设我们有一个电商平台,需要根据用户输入的模糊关键词搜索相关商品。在过去,使用传统的 Wildcard 查询时,由于性能问题和局限性,导致搜索结果不准确且响应速度慢。

采用 Ngram 分词优化方案

我们对商品的名称、描述等字段进行了 Ngram 分词优化。例如,对于商品 “红色连衣裙”,经过 Ngram 分词处理后,可能会得到 “红”“红色”“色连”“连衣裙” 等词项。当用户输入 “红色裙” 进行搜索时,能够更准确地召回相关商品,提高了召回率,用户能够更快地找到自己想要的商品。

Match_phrase 结合 Ngram 方案应用

当用户输入 “夏季时尚上衣” 这样的模糊查询条件时,先通过 Ngram 分词将其切分成 “夏季”“季时”“时尚”“尚上”“上衣” 等词项,然后 match_phrase 确保这些词项在商品描述中的顺序一致。比如,只有商品描述中同时出现 “夏季 时尚 上衣” 这样顺序的商品才会被召回,大大提高了查询的准确性和相关性,为用户提供了更符合其需求的搜索结果。

Wildcard 字段类型的实践

假设我们定义了一个 wildcard 类型的字段来存储商品的特殊属性,比如促销标签。当用户输入 “限时” 这样的通配符查询时,能够快速准确地找到带有 “限时折扣”“限时优惠” 等标签的商品,提升了搜索效率,同时没有显著增加存储成本。

通过以上实践案例,可以明显看到替代方案在实际场景中的有效应用,为电商平台的搜索功能带来了显著的改进,提升了用户的购物体验。

五、总结与展望

在本文中,我们深入探讨了 Elasticsearch 中 Wildcard 模糊查询的替代方案。

总结而言,Ngram 分词优化通过更细粒度的切分提高了召回率,适用于对召回精度有要求的场景;Match_phrase 结合 Ngram 能更准确地理解用户意图,在对查询准确性和相关性要求极高的情况下表现出色;Wildcard 字段类型则在查询性能和空间占用方面具有优势,使用相对简单。

展望未来,随着数据量的不断增长和用户对搜索体验要求的提高,这些替代方案可能会进一步优化和融合。例如,Ngram 分词的算法可能会更加智能,以更好地平衡索引大小和召回效果;Match_phrase 与 Ngram 的结合可能会更加紧密,提供更灵活和精确的查询方式;Wildcard 字段类型或许会在支持更多复杂的通配符模式和提高处理大规模数据的能力上有所突破。

同时,随着技术的发展,可能会出现新的模糊查询技术和策略,与现有方案相互补充和完善,为 Elasticsearch 的模糊查询提供更强大、更高效的解决方案,以满足不断变化的业务需求和用户期望。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2056425.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【数据结构】关于冒泡排序,选择排序,插入排序,希尔排序,堆排序你到底了解多少???(超详解)

前言: 🌟🌟Hello家人们,这期讲解排序算法的原理,希望你能帮到屏幕前的你。 🌈上期博客在这里:http://t.csdnimg.cn/I1Ssq 🌈感兴趣的小伙伴看一看小编主页:GGBondlctrl-C…

RK3568平台开发系列讲解(PWM篇)PWM的使用

文章目录 一、什么是PWM二、RK3568 PWM2.1、PWM 通道与引脚2.2、PWM 简介2.3、PWM 设备节点三、RK3568 PWM 调试节点📢 PWM 是很常用到功能,我们可以通过 PWM 来控制电机速度,也可以使用 PWM 来控制 LCD 的背光亮度。 一、什么是PWM PWM 全称是 Pulse Width Modulation,也…

XSS- - - DOM 破坏案例与靶场

目录 链接靶场: 第一关 Ma Spaghet 第二关 Jefff 第三关 Ugandan Knuckles 第四关 Ricardo Milos 第五关 Ah Thats Hawt 第六关 Ligma 第七关 Mafia 第八关 Ok, Boomer 链接靶场: XS…

SmartEDA崛起!揭秘其逐步取代Multisim与Proteus的四大颠覆性优势

在电子设计自动化(EDA)的浩瀚星空中,两款老牌软件——Multisim与Proteus,长久以来如同璀璨的双星,引领着电路仿真与设计的潮流。然而,近年来,一颗新星悄然升起,以其独特的魅力与强大…

《向量数据库 Faiss 搭建与使用全攻略》

一、Faiss 概述 Faiss 是由 Facebook AI 团队开发的一款强大工具,在大规模数据处理和相似性搜索领域占据着重要地位。 在当今信息爆炸的时代,数据规模呈指数级增长,如何从海量数据中快速准确地找到相似的数据成为了关键挑战。Faiss 应运而生…

【MeterSphere】占用磁盘空间过大问题处理方式

目录 一、现象 二、 清理docker系统命令(效果不大) 三、 追踪文件 四、 处理logs(小处理) 五、 对比容器问题发现node容器问题 六、结果 前言:部署ms使用一段时间,服务器监控发现磁盘空间占用过大&am…

基于SpringBoot的Java个人博客系统的设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图详细视频演示技术栈系统测试为什么选择我官方认证玩家,服务很多代码文档,百分百好评,战绩可查!!入职于互联网大厂,可以交流,共同进步。有保障的售后 代码参考数据库参…

【Unity教程】使用 Animation Rigging实现IK制作程序化的动画手臂跟随手自动移动等效果

在 Unity 开发中,为角色创建逼真且自适应的动画是提升游戏体验的关键。在本教程中,我们将结合 Animation Rigging 工具和 IK(Inverse Kinematics,反向运动学)插件来实现程序化的动画。 视频教程可以参考b战大佬的视频…

CLIP模型(一)

一、概念 Contrastive Language-Image Pre-Training(利用文本的监督信息训练一个迁移能力强的视觉模型) CLIP任务: CLIP在完全不使用ImageNet中所有数据训练的前提下 直接Zero-shot得到的结果与Resnet在128W Imagenet数据局训练后效果一样 现在CLIP下游任务已经…

Java-Mybatis-MybatisPlus

文章目录 Mybatis基础概念持久层框架比较环境搭建及工程创建核心配置文件xxxMapper.xml文件mybatis实现过程junit测试mybatis及优化查询sql语句 Mybatis-plus基础概述组成及实现过程SpringbootMybatisPlus使用过程 实战插入操作默认id Mybatis 基础 概念 历史:My…

学分绩点预警系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图详细视频演示技术栈系统测试为什么选择我官方认证玩家,服务很多代码文档,百分百好评,战绩可查!!入职于互联网大厂,可以交流,共同进步。有保障的售后 代码参考数据库参…

【图像去噪】论文精读:Toward Convolutional Blind Denoising of Real Photographs(CBDNet)

文章目录 前言Abstract1. Introduction2. Related Work2.1. Deep CNN Denoisers2.2. Image Noise Modeling2.3. Blind Denoising of Real Images 3. Proposed Method3.1. Realistic Noise Model3.2. Network Architecture3.3. Asymmetric Loss and Model Objective3.4. Trainin…

分享世界上最好的5个滑雪小镇

滑雪爱好者和冬季旅行者们,听好了。随着北半球变成冰雪仙境,是时候计划下一个冰雪覆盖的冒险了。 无论你是一个经验丰富的专业人士还是一个滑雪新手,我们整理了世界上五个最好的滑雪小镇,帮助你找到你完美的白雪覆盖的天堂。 这些…

CPMF复现笔记(2):训练MVTecAD-3D数据集, 精度SOTA

文章来自曹云康的最新论文《Complementary Pseudo Multimodal Feature for Point Cloud Anomaly Detection》,在MVTecAD-3D取得了最佳分数。代码地址GitHub - caoyunkang/CPMF: [PR] Complementary Pseudo Multimodal Feature for Point Cloud Anomaly Detection 复现效果 …

【ARM Hypervisor And SMMU 系列 5 -- SMMU 和 IOMMU技术】

文章目录 SMMU 和 IOMMU技术ARM 的 SMMUTranslation process overviewTBU 和 TCU 的关系TBUTCUTLBSMMU 和 IOMMU技术 文章 讲到了为支持I/O透传机制中的DMA设备传输而引入的IOMMU/SMMU技术,同时留了一个问题:IOMMU/SMMU是否可以同时支持GVA->GPA和GPA->HPA的转换? 答案…

【学习笔记】卫星网络(NTN)的窄带物联网(NB-IoT)研究 -- 3GPP TR 36.763(二)

目录 6 无线层1的问题及相关解决方案 6.1 IoT NTN参考参数 6.2 链路预算分析 6.2.1 链路预算参数 6.2.2.1.1 Set-1 6.2.2.1.2 Set-2 6.2.2.1.3 Set-3 6.2.2.1.4 Set-4 6.2.2.1.5 Set-5 6.3 时间和频率同步增强 6.3.1 GNSS位置固定对UE功耗的影响 6.3.1…

Java使用Graphics绘制图片文字边缘出现粗糙的锯齿问题解决

为什么会出现锯齿问题 文字出现锯齿的现象通常是由于显示设备的分辨率有限,无法完美地表现出字符的曲线和斜线的原因。 怎么解决 可以通过Graphics2D设置抗锯齿效果 // 打开抗锯齿效果g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VAL…

linux服务 学习

服务(Service) 在Linux操作系统中,服务(Service)是一个基本概念,它通常指的是运行在后台的、持续提供特定功能或资源给系统内部组件或者网络上的客户端程序。 这些服务是系统正常运行和提供各种功能的关键…

目标检测 | yolov7 原理和介绍

相关系列: 目标检测 | yolov1 原理和介绍 目标检测 | yolov2/yolo9000 原理和介绍 目标检测 | yolov3 原理和介绍 目标检测 | yolov4 原理和介绍 目标检测 | yolov5 原理和介绍 目标检测 | yolov6 原理和介绍 目标检测 | yolov7 原理和介绍 目标检测 | yolov8 原理和…

Maven-05.依赖管理-依赖配置

一.依赖管理-配置 例如&#xff1a;我们要在maven项目中导入logback日志依赖&#xff0c;那么我们编辑pom.xml文件。 <dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.2.3</versio…