【Elasticsearch】全文检索 组合检索

全文检索

  • 1.全文检索
    • 1.1 准备测试数据
    • 1.2 案例分析
      • 1.2.1 match(分词检索)
      • 1.2.2 match_phrase(短语检索)
      • 1.2.3 match_phrase_prefix(短语前缀匹配)
      • 1.2.4 multi_match(多字段匹配)
      • 1.2.5 query_string(高级查询语法)
      • 1.2.6 simple_query_string
    • 1.3 对比总结表
  • 2.组合检索

1.全文检索

1.1 准备测试数据

创建一个索引。

PUT /products
{"mappings": {"properties": {"name": {"type": "text", "fields": {"keyword": {"type": "keyword"}}},"price": {"type": "double"},"category": {"type": "keyword"},"tags": {"type": "keyword"},"description": {"type": "text"},"stock": {"type": "integer"},"sku": {"type": "keyword"},"created_at": {"type": "date"},"metadata": {"type": "object"}}}
}

插入测试数据。

POST /products/_bulk
{"index":{}}
{"name":"Laptop X1","price":1299.99,"category":"electronics","tags":["new","sale"],"description":"High performance laptop","stock":50,"sku":"LP-X1-2023","created_at":"2023-01-15","metadata":{"weight":1.5,"color":"silver"}}
{"index":{}}
{"name":"Smartphone S10","price":899.99,"category":"electronics","tags":["new","popular"],"description":"Latest smartphone model","stock":120,"sku":"SP-S10-2023","created_at":"2023-02-20","metadata":{"weight":0.3,"color":"black"}}
{"index":{}}
{"name":"Wireless Headphones","price":199.99,"category":"audio","tags":["sale","popular"],"description":"Noise cancelling headphones","stock":75,"sku":"WH-200-2022","created_at":"2022-11-10","metadata":{"weight":0.25,"color":"white"}}
{"index":{}}
{"name":"Smart Watch","price":249.99,"category":"wearables","tags":["new","featured"],"description":"Fitness tracking smartwatch","stock":30,"sku":"SW-500-2023","created_at":"2023-03-05","metadata":{"weight":0.1,"color":"black"}}
{"index":{}}
{"name":"4K TV","price":1499.99,"category":"electronics","tags":["premium","large"],"description":"55-inch 4K television","stock":15,"sku":"TV-4K-55-2023","created_at":"2023-01-25","metadata":{"weight":18.5,"color":"black"}}
{"index":{}}
{"name":"Bluetooth Speaker","price":129.99,"category":"audio","tags":["portable"],"description":"Waterproof bluetooth speaker","stock":60,"sku":"BS-100-2022","created_at":"2022-12-15","metadata":{"weight":0.8,"color":"blue"}}
{"index":{}}
{"name":"Gaming Mouse","price":79.99,"category":"accessories","tags":["gaming"],"description":"High DPI gaming mouse","stock":90,"sku":"GM-X200","created_at":"2023-02-01","metadata":{"weight":0.12,"color":"rgb"}}
{"index":{}}
{"name":"External SSD 1TB","price":159.99,"category":"storage","tags":["fast","reliable"],"description":"Portable SSD drive","stock":45,"sku":"ESSD-1TB-2023","created_at":"2023-03-10","metadata":{"weight":0.05,"color":"gray"}}
{"index":{}}
{"name":"Keyboard Pro","price":109.99,"category":"accessories","tags":["ergonomic"],"description":"Mechanical keyboard","stock":25,"sku":"KB-PRO-2023","created_at":"2023-03-15","metadata":{"weight":1.1,"color":"black"}}
{"index":{}}
{"name":"Tablet T8","price":499.99,"category":"electronics","tags":["new","portable"],"description":"10-inch tablet","stock":40,"sku":"TAB-T8-2023","created_at":"2023-02-28","metadata":{"weight":0.5,"color":"silver"}}
{"index":{}}
{"name":"Camera DSLR","price":899.99,"category":"photography","tags":["professional"],"description":"24MP DSLR camera","stock":20,"sku":"CAM-DSLR-24","created_at":"2023-01-10","metadata":{"weight":0.7,"color":"black"}}
{"index":{}}
{"name":"Monitor 27\"","price":299.99,"category":"electronics","tags":["office"],"description":"27-inch office monitor","stock":35,"sku":"MON-27-2023","created_at":"2023-02-15","metadata":{"weight":4.2,"color":"black"}}

在这里插入图片描述

1.2 案例分析

1.2.1 match(分词检索)

对字段进行分词后匹配,支持模糊匹配和运算符。

GET /products/_search
{"query": {"match": {"description": {"query": "niose cancelling",  // 故意拼错 "noise" 测试模糊匹配"fuzziness": "AUTO"}}}
}

在这里插入图片描述

1.2.2 match_phrase(短语检索)

要求词语按顺序完整出现,可设置 slop,允许中间有其他词。

GET /products/_search
{"query": {"match_phrase": {"description": {"query": "high laptop","slop": 1  // 允许中间有 1 个其他词}}}
}

在这里插入图片描述

1.2.3 match_phrase_prefix(短语前缀匹配)

短语匹配,但最后一个词支持前缀匹配。

GET /products/_search
{"query": {"match_phrase_prefix": {"name": {"query": "Smart Wa",  // 匹配 "Smart Watch" 等"max_expansions": 10  // 限制扩展数量}}}
}

在这里插入图片描述

1.2.4 multi_match(多字段匹配)

multi_match 检索适用于在多个字段上执行 match 检索的场景。它提供了一种方便的方法来在多个字段中间同时搜索指定的关键词,从而实现跨字段的高效检索。通过使用 multi_match 检索,用户可以简化复杂的多字段查询,优化搜索体验,并确保结果满足各种检索需求。

GET /products/_search
{"query": {"multi_match": {"query": "portable","fields": ["name", "description", "tags"],"type": "best_fields"}}
}

由于涉及的字段不止一个,multi_match 检索在处理结果评分时采用特殊的评分机制,包括 most_fieldsbest_fieldscross_fields 等评分方式。这些评分方式确定了如何对每个字段获取的分数进行整合。

在这里插入图片描述

为了强调 tags 字段在搜索结果中的重要性,我们使用 ^3 来提高其权重。这意味着匹配 tags 字段的文档具有更高的相关性分数。

GET /products/_search
{"query": {"multi_match": {"query": "portable","fields": ["name", "description", "tags^3"], "type": "best_fields"}}
}

在这里插入图片描述

1.2.5 query_string(高级查询语法)

支持 Lucene 查询语法,功能强大但较复杂。

例如:查找在 namedescription 字段中包含 laptopsmartphone,并且 price 字段值在 100 100 100 1000 1000 1000 之间的所有产品文档。

GET /products/_search
{"query": {"query_string": {"query": "(laptop OR smartphone) AND price:[100 TO 1000]","fields": ["name", "description"],"default_operator": "AND"}}
}

在这里插入图片描述

1.2.6 simple_query_string

更简单的语法,对用户输入更友好,容错性更好。

例如,搜索同时满足以下条件的产品:

  • 仅在商品名称(name)和描述(description)字段中搜索。
  • 必须包含 speaker(由 +speaker 表示)。
  • 必须不包含 blue(由 -blue 表示)。
  • 最好包含 waterproof(没有前缀符号,作为可选条件)。
GET /products/_search
{"query": {"simple_query_string": {"query": "waterproof +speaker -blue", "fields": ["name", "description"],"default_operator": "AND"}}
}
  • + 必须包含,- 必须不包含。
  • "default_operator": "AND" 表示当有多个搜索词时(没有 + / - 前缀的词),默认使用 AND 逻辑。
    • AND 操作符:提高精确度(结果更少但更相关)。
    • OR 操作符:提高召回率(结果更多但可能包含不相关项)。

如果用 SQL 表示,类似于:

SELECT * FROM products
WHERE (name LIKE '%speaker%' OR description LIKE '%speaker%')
AND (name NOT LIKE '%blue%' AND description NOT LIKE '%blue%')
AND (name LIKE '%waterproof%' OR description LIKE '%waterproof%')

在这里插入图片描述

注意:虽然 metadata.color 包含 blue,但没有检查 metadata.color 的内容,所以会按照上述内容返回。

如果真正目的是排除蓝色产品,应该这样查询:

GET /products/_search
{"query": {"bool": {"must": {"simple_query_string": {"query": "waterproof +speaker","fields": ["name", "description"]}},"must_not": {"term": {"metadata.color": "blue"}}}}
}

在这里插入图片描述

1.3 对比总结表

查询类型特点适用场景语法复杂度
match基本分词匹配,支持模糊常规搜索
match_phrase精确短语匹配引号搜索、固定短语
match_phrase_prefix短语+最后词前缀自动补全
multi_match多字段搜索跨字段搜索
query_string完整查询语法高级搜索界面
simple_query_string简化语法用户直接输入

2.组合检索

  • must:查询结果必须满足指定条件。
  • must_not:查询结果必须不满足指定条件。在此情况下,召回的数据评分为 0 0 0,且不考虑评分。
  • filter:过滤条件,同样不考虑评分,召回的数据评分为 0 0 0。使用 filter 可以借助缓存机制提高查询性能。
  • should:查询结果可以满足的部分条件,具体满足条件的最小数量由 minimum_should_match 参数控制。

🚀 Elasticsearch 查询语句中的 queryfilter 具有不同的用途。

  • query 用于评估文档相关性,并对结果进行评分,通常用于搜索场景。
  • filter 用于筛选文档,不会对文档评分,通常用于过滤场景。

业务要求:查找符合以下条件的相关产品,其中:

  • 必须在 categorydescription 中包含 electronics
  • 优先显示以下产品:
    • description 中提到 high performance 的产品。
    • 被标记为 popular 的产品。
    • 同时满足多个加分条件的产品会排名更靠前。
GET /products/_search
{"query": {"bool": {"must": [{"multi_match": {"query": "electronics","fields": ["category^2", "description"],"type": "most_fields"}}],"should": [{"match_phrase": {"description": {"query": "high performance","slop": 2}}},{"match": {"tags": {"query": "popular"}}}],"minimum_should_match": 1}}
}

在这里插入图片描述

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

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

相关文章

信号处理学习——文献精读与code复现之TFN——嵌入时频变换的可解释神经网络(上)

​​​​​​​​​​​​​​TFN: An interpretable neural network with time-frequency transform embedded for intelligent fault diagnosis - ScienceDirecthttps://www.sciencedirect.com/science/article/abs/pii/S0888327023008609?via%3Dihub (看看玲娜贝…

Panda3D实战:从入门到精通

Panda3D基础实例 创建一个简单的Panda3D场景,加载一个模型并显示: from direct.showbase.ShowBase import ShowBaseclass MyApp(ShowBase):def __init__(self):ShowBase.__init__(self)self.scene = self.loader.loadModel("models/environment")self.scene.repa…

Galera集群:高可用MySQL同步复制方案

目录 Galera Cluster 概述 核心架构与组件 WSREP API Group Communication System (GCP) 同步复制机制 复制流程详解 冲突检测算法 关键特性 多主架构实现 强一致性保障 自动成员管理 性能优化策略 并行复制实现 流控机制详解 批处理与压缩 部署与监控 详细配…

MybatisPlus-03.快速入门-常用注解

一.MP的原理 mp究竟是如何知道我们需要对哪个表进行操作,并且又是如何知道要操作哪些字段的呢?这是因为mp使用到了反射机制,我们在定义mapper接口时使其继承了BaseMapper接口,并指定了BaseMapper接口泛型为User,因此m…

ABAP+记录一个BDC的BUG修改过程

问题背景: 业务顾问反馈在使用BDC 进行MEQ1进行供应商配额时,由于以前录屏时用例只有3行数据,导致现在有5行数据的时候,代码仍然只获取了3行数据进行录入,现在需要更改代码,使其按照实际情况自动调整行数。…

github上传代码步骤(http)

github上传步骤(http) 之前github上传不了代码,总是报错。后面发现自己用的ssh上传需要秘钥,现在我介绍一个最简单的http上传方法(虽然没有ssh安全。。。但简单嘛~),现在我做个例子&#xff0c…

深入理解Nginx-以实际http通信例子改造带ssl配Nginx的实战-优雅草卓伊凡|麻子

深入理解Nginx-以实际http通信例子改造带ssl配Nginx的实战-优雅草卓伊凡|麻子 SSL/TLS在Nginx中的底层实现原理 Nginx的SSL模块架构 Nginx通过ngx_http_ssl_module模块实现SSL/TLS功能,该模块基于OpenSSL库构建。根据Nginx官方文档,SSL模块在Nginx架构…

AT6558R-5N32介绍

作为单芯片SOC方案,AT6558R在片上整合了射频前端、数字基带处理器与32位RISC CPU,并具备电源管理能力。该芯片兼容北斗、GPS、GLONASS三大卫星导航系统,可实现多模协同定位‌。 主要特征 支持 BDS/GPS/GLONASS 多系统联合定位 和单系统独立定…

“对象创建”模式之原型模式

目录 Prototype 原型模式动机 Motivation引例模式定义结构 Structure要点总结 Prototype 原型模式 动机 Motivation 在软件系统中,经常面临着“某些结构复杂的对象”的创建工作;由于需求的变化,这些对象经常面临着剧烈的变化,但…

Tomcat服务概述

前言: 作为Apache软件基金会Jakarta项目的核心成果,Tomcat凭借其轻量级、开源免费的特性,已成为Java Web应用服务的行业基准。它实现了完整的Servlet与JSP规范,通过模块化架构(Connector请求处理层与Container业务逻辑…

HarmonyOS应用开发高级认证知识点梳理 (一) 布局与样式

以下是 HarmonyOS 应用开发中 ‌布局与样式‌ 的核心知识点梳理(针对高级认证备考),结合官方文档与高频考点: 一、布局系统核心知识点 布局容器类型‌ 线性布局‌:Column(纵向)、Row&#xf…

【Ragflow】30.离线环境迁移方案

前言 之前的 Ragflow-Plus 在服务器上稳定运行一段时间后,接到任务,要把服务迁移到一台古老的,离线的windows台式机上。 起初认为,下载离线安装包,加载离线镜像,迁移下数据就可以了。 结果坑多得意想不到…

nrf52840蓝牙学习(定时器的应用)

和其他 MCU 处理器一样,在 nrf52840 中定时器的功能是十分强大的。其内部包含了 5 个定时 器 TIMER 模块 :TIMER0 、 TIMER1 、 TIMER2 、 TIMER3 、 TIMER4 ,如下表 10.1 所示。 1. 时钟源 首先定时器 TIMER 工作在高频时钟源&#xff08…

【Bluedroid】蓝牙启动之BTM_reset_complete源码解析

当蓝牙控制器完成硬件重置后,协议栈需通过一系列初始化操作恢复各模块状态。本文深入分析BTM_reset_complete核心函数及其调用链,详解 L2CAP 连接清理、安全模块重置、扫描参数恢复、BLE 隐私功能初始化等关键流程,揭示蓝牙设备在重置后如何通过标准化状态恢复确保互操作性、…

containerd 项目主要目录简要说明

containerd 项目结构清晰,核心代码分布在若干主目录下。以下是 client、cmd、core、internal、pkg、plugins 这六个主要包/目录的简要作用说明: 1. client 作用:封装与 containerd 守护进程通信的 Go 客户端 API,主要基于 gRPC。…

有线转无线工具,轻松创建WiFi热点

软件介绍 今天为大家推荐一款实用的无线网络共享工具——MyPublicWiFi。这款软件能够将电脑的有线网络转换为无线WiFi,方便其他设备连接使用。 安装与设置 该软件为安装版程序,安装完成后会自动识别当前电脑的IP地址。用户可在软件界面中自定义设…

Linux下,通过标准I2C驱动读取Sensor ID

sensor型号&#xff1a;OS04L10&#xff0c;sensor引脚以及时钟要先配置好&#xff0c;源码如下&#xff1a; #include <fcntl.h> #include <linux/i2c-dev.h> #include <linux/i2c.h> #include <stdint.h> #include <stdio.h> #include <sy…

人工智能基石:SVM支持向量机全解析(附Python实战)

大家好&#xff01;今天我们来深入探讨支持向量机&#xff08;Support Vector Machine, SVM&#xff09;——这个在​​图像识别、文本分类​​等领域广泛应用的强大算法。既能处理分类问题&#xff0c;又能解决回归任务&#xff0c;甚至在非线性数据面前也能游刃有余。本文将带…

mysql查看数据库

在 MySQL 中查看当前数据库的创建语句&#xff0c;使用 SHOW CREATE DATABASE 命令&#xff0c;以下是详细操作指南&#xff1a; 1. 查看当前数据库的创建语句 SHOW CREATE DATABASE database_name; 替换 database_name 为你的数据库名使用反引号 包裹特殊名称或保留字 2.…

ArrayList剖析

大家天天在用List&#xff0c;ArrayList一般来讲应该是程序员用的最多的集合类了。 我们今天研究一下ArrayList。 总体来讲&#xff0c;从底层数据结构或者源码的角度看&#xff0c;List比Map或者Set要简单。 底层数据结构 ArryList其实就是可变长数组。 初始化的时候&…