Elasticsearch:ES|QL 中的全文搜索 - 8.17

细心的开发者如果已经阅读我前两天发布的文章 “Elastic 8.17:Elasticsearch logsdb 索引模式、Elastic Rerank 等”,你就会发现在 8.17 的发布版中,有一个重要的功能发布。那就是 ES|QL 开始支持全文搜索了。在今天的文章中我们来尝试一下。

ES|QL 中新的 MATCH 和查询字符串 (QSTR) 函数的技术预览使日志搜索更加轻松直观。MATCH 使用 Lucene 匹配查询在 ES|QL 中提供全文搜索功能,而 QTSR 通过启用 Lucene 查询字符串查询来帮助更高级地过滤日志数据。

ES|QL 的全文搜索使 Discover 中的搜索更加轻松、性能更高,尤其是在处理多个术语或条件逻辑时。

ES|QL 中的这些新搜索功能提供了显着的性能改进。查询现在可以比等效 RLIKE 查询快 50 倍到 1000 倍,尤其是在较大的数据集上。将此功能添加到 ES|QL 允许你利用 Elastic 的主要优势之一 - 能够提前索引所有数据 - 从而一次性完成繁重的工作并在以后实现真正快速的全文搜索。

所有这些都与 Elasticsearch DSL 函数紧密结合,以便在搜索中实现更好的功能奇偶校验、直观性和速度。 ES|QL 还提供完整的地理搜索功能,并显著改善按距离排序的延迟。

MATCH function

警告:请勿在生产环境中使用。此功能处于技术预览阶段,可能会在未来版本中更改或删除。Elastic 将努力修复任何问题,但技术预览中的功能不受官方 GA 功能的支持 SLA 约束。

语法

参数

参数描述
field查询将针对的字段。
query你希望在提供的字段中查找的文本。

支持的类型

fieldqueryresult

keyword

keyword

boolean

keyword

text

boolean

text

keyword

boolean

text

text

boolean

示例

我们首先来创建如下的一个 books 索引:

PUT books
{"mappings": {"properties": {"title": {"type": "keyword"},"author": {"type": "text"},"book_no": {"type": "long"}}}
}

如上所示,我们创建了3个字段,它们分别有不同的属性。我们使用如下的命令来写入文档:

PUT books/_bulk
{"index": {"_id": "1"}}
{"title":"Whispers of Eternity", "book_no": 2378, "author": "[Carol Faulkner, Holly Byers Ochoa, Lucretia Mott]"}
{"index": {"_id": "2"}}
{"title":"The Crimson Horizon", "book_no": 2713, "author": "William Faulkner"}
{"index": {"_id": "3"}}
{"title":"Shadows in Bloom", "book_no": 2847, "author": "Colleen Faulkner"}
{"index": {"_id": "4"}}
{"title":"Echoes of Tomorrow", "book_no": 2883, "author": "William Faulkner"}
{"index": {"_id": "5"}}
{"title":"Beneath the Ashen Sky", "book_no": 2713, "author": "Danny Faulkner"}

我们进行如下的搜索:

POST _query?format=txt
{"query": """FROM books| WHERE MATCH(author, "Faulkner")| KEEP book_no, author| SORT book_no| LIMIT 5"""
}

上面的命令得到的结果是:

    book_no    |                      author                      
---------------+--------------------------------------------------
2378           |[Carol Faulkner, Holly Byers Ochoa, Lucretia Mott]
2713           |Danny Faulkner                                    
2713           |William Faulkner                                  
2847           |Colleen Faulkner                                  
2883           |William Faulkner          

如果我们去掉那个 SORT,我们可以看到的排序结果是:

POST _query?format=txt
{"query": """FROM books| WHERE MATCH(author, "Faulkner")| KEEP book_no, author| LIMIT 5"""
}

我们得到的结果是:

    book_no    |                      author                      
---------------+--------------------------------------------------
2378           |[Carol Faulkner, Holly Byers Ochoa, Lucretia Mott]
2713           |William Faulkner                                  
2847           |Colleen Faulkner                                  
2883           |William Faulkner                                  
2713           |Danny Faulkner                                    

我们把搜索词的大小写改一下成 “faulKner",我们看看能否得到我们想要的结果:

POST _query?format=txt
{"query": """FROM books| WHERE MATCH(author, "faulKner")| KEEP book_no, author| LIMIT 5"""
}

我们得到的结果是:

    book_no    |                      author                      
---------------+--------------------------------------------------
2378           |[Carol Faulkner, Holly Byers Ochoa, Lucretia Mott]
2713           |William Faulkner                                  
2847           |Colleen Faulkner                                  
2883           |William Faulkner                                  
2713           |Danny Faulkner                                    

很显然,我们得到的是同样的结果,尽管我们把搜索词的大小写都改变了。

我们再次做如下的搜索:

POST _query?format=txt
{"query": """FROM books| WHERE MATCH(author, "Danny")| KEEP book_no, author| LIMIT 5"""
}

我们得到的结果是:

    book_no    |    author     
---------------+---------------
2713           |Danny Faulkner 

很显然这次只有一个结果。但是如果我们这样来进行搜索:

POST _query?format=txt
{"query": """FROM books| WHERE MATCH(author, "Danny Faulkner")| KEEP book_no, author| LIMIT 5"""
}

我们得到的结果是:

    book_no    |                      author                      
---------------+--------------------------------------------------
2378           |[Carol Faulkner, Holly Byers Ochoa, Lucretia Mott]
2713           |William Faulkner                                  
2847           |Colleen Faulkner                                  
2883           |William Faulkner                                  
2713           |Danny Faulkner        

这次得到的结果有点出乎我们的意料。我们更希望 “Danny Faulkner” 成为排名第一的结果。很显然这个结果并不是我们想要的。

我们接下来针对 keyword 字段来进行测试:

POST _query?format=txt
{"query": """FROM books| WHERE MATCH(title, "The Crimson Horizon")| KEEP book_no, title| LIMIT 5"""
}

我们得到的结果是:

    book_no    |        title        
---------------+---------------------
2713           |The Crimson Horizon  
2713           |Beneath the Ashen Sky

很显然,第二个结果中有一个 the 匹配,所以在召回里含有这个书目。这个还是全文搜索,尽管 title 字段是 keyword。

如果我们把 The 改成 the, 我们得到的是一样的结果:

POST _query?format=txt
{"query": """FROM books| WHERE MATCH(title, "the Crimson Horizon")| KEEP book_no, title| LIMIT 5"""
}

我们可以和以前不使用 MATCH function 的查询来进行比较:

POST _query?format=txt
{"query": """FROM books| WHERE author LIKE "William *"| KEEP book_no, author| LIMIT 5"""
}

上面返回结果:

    book_no    |     author     
---------------+----------------
2713           |William Faulkner
2883           |William Faulkner

这是一种 keyword 的搜索 尽管 author 字段是 text 字段。如果我们进行如下的搜索:

POST _query?format=txt
{"query": """FROM books| WHERE author LIKE "william *"| KEEP book_no, author| LIMIT 5"""
}

上面的搜索将没有任何的结果。

QSTR function

警告:请勿在生产环境中使用 VALUES。此功能处于技术预览阶段,可能会在未来版本中更改或删除。Elastic 将努力修复任何问题,但技术预览中的功能不受官方 GA 功能的支持 SLA 约束。

语法

参数

参数描述
queryLucene 查询字符串格式的查询字符串。

描述

执行查询字符串查询。如果提供的查询字符串与行匹配,则返回 true。

queryresult

keyword

boolean

text

boolean

示例

我们使用如下的示例来进行展示:

POST _query?format=txt
{"query": """FROM books| WHERE QSTR("author: Faulkner")| KEEP book_no, author| LIMIT 5"""
}

上面命令返回的结果是:

    book_no    |                      author                      
---------------+--------------------------------------------------
2378           |[Carol Faulkner, Holly Byers Ochoa, Lucretia Mott]
2713           |William Faulkner                                  
2847           |Colleen Faulkner                                  
2883           |William Faulkner                                  
2713           |Danny Faulkner           

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

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

相关文章

SQL和Python 哪个更容易自学?

SQL和Python不是一个物种,Python肯定更难学习。如果你从事数据工作,我建议先学SQL、有余力再学Python。因为SQL不光容易学,而且前期的投入产出比更大。 SQL是数据查询语言,场景限于数据查询和数据库的管理,对大部分数据…

【unity】从零开始制作平台跳跃游戏--界面的认识,添加第一个角色!

在上一篇文章中,我们已经完成了unity的环境配置与安装⬇️ 【Unity】环境配置与安装-CSDN博客 接下来,让我们开始新建一个项目吧! 新建项目 首先进入unityHub的项目页面,点击“新项目”: 我们这个系列将会以2D平台…

怎么禁用 vscode 中点击 go 包名时自动打开浏览器跳转到 pkg.go.dev

本文引用怎么禁用 vscode 中点击 go 包名时自动打开浏览器跳转到 pkg.go.dev 在 vscode 设置项中配置 gopls 的 ui.navigation.importShortcut 为 Definition 即可。 "gopls": {"ui.navigation.importShortcut": "Definition" }ui.navigation.i…

Unity3D实现抽象类的应用场景例子

系列文章目录 unity知识点 文章目录 系列文章目录👉前言👉一、示例👉二、使用步骤👉三、抽象类和接口的区别👉3-1、抽象类👉3-2、接口类👉壁纸分享👉总结👉前言 假设我们正在制作一个游戏,游戏中有多种不同类型的角色,这些角色都有一些共同的行为(比如移…

数据仓库工具箱—读书笔记01(数据仓库、商业智能及维度建模初步)

数据仓库、商业智能及维度建模初步 记录一下读《数据仓库工具箱》时的思考,摘录一些书中关于维度建模比较重要的思想与大家分享🤣🤣🤣 博主在这里先把这本书"变薄"~有时间的小伙伴可以亲自再读一读,感受一下…

docker启动一个helloworld(公司内网服务器)

这里写目录标题 容易遇到的问题:1、docker连接问题 我来介绍几种启动 Docker Hello World 的方法: 最简单的方式: docker run hello-world这会自动下载并运行官方的 hello-world 镜像。 使用 Nginx 作为 Hello World: docker…

基于IEEE 802.1Qci的时间敏感网络(TSN)主干架构安全分析及异常检测系统设计

中文标题:基于IEEE 802.1Qci的时间敏感网络(TSN)主干架构安全分析及异常检测系统设计 英文标题:Security Analysis of the TSN Backbone Architecture and Anomaly Detection System Design Based on IEEE 802.1Qci 作者信息&…

怎样提升企业网络的性能?

企业网络的稳定性和高效性直接影响员工的工作效率。以下从多维度分析了一些有效策略,帮助公司提升网络性能,营造更高效的办公环境。 1. 升级网络设备 采用性能更高的网络硬件是优化网络体验的重要基础。选择支持高吞吐量、低延迟的设备(如企业…

力扣239.滑动窗口最大值

文章目录 一、前言二、单调队列 一、前言 力扣239.滑动窗口最大值 滑动窗口最大值,这道题给定一个数组,以及一个窗口的长度,这个窗口会往后滑动,直到数组最后一个元素。 要求每个滑动窗口的中的最大值。对于这道题,我…

mac 安装CosyVoice (cpu版本)

CosyVoice 介绍 CosyVoice 是阿里研发的一个tts大模型 官方项目地址:https://github.com/FunAudioLLM/CosyVoice.git 下载项目(非官方) git clone --recursive https://github.com/v3ucn/CosyVoice_for_MacOs.git 进入项目 cd CosyVoic…

Maven 安装配置(详细教程)

文章目录 一、Maven 简介二、下载 Maven三、配置 Maven3.1 配置环境变量3.2 Maven 配置3.3 IDEA 配置 四、结语 一、Maven 简介 Maven 是一个基于项目对象模型(POM)的项目管理和自动化构建工具。它主要服务于 Java 平台,但也支持其他编程语言…

Scala中的泛型特质

代码如下: package test41 //泛型特质 object test3 { //定义一个日志//泛型特质,X是泛型名称,可以更改。trait Logger[X] {val content: Xdef show():Unit }class FileLogger extends Logger[String] {override val content: String "…

ASP.NET |日常开发中读写XML详解

ASP.NET |日常开发中读写XML详解 前言一、XML 概述1.1 定义和结构1.2 应用场景 二、读取 XML 文件2.1 使用XmlDocument类(DOM 方式)2.2 使用XmlReader类(流方式) 三、写入 XML 文件3.1 使用XmlDocument类3.2 使用XmlWr…

分布式 Paxos算法 总结

前言 相关系列 《分布式 & 目录》《分布式 & Paxos算法 & 总结》《分布式 & Paxos算法 & 问题》 参考文献 《图解超难理解的 Paxos 算法(含伪代码)》《【超详细】分布式一致性协议 - Paxos》 Basic-Paxos 基础帕克索斯算法…

Git-基础操作命令

目录 Git基础操作命令 case *查看提交日志 log 版本回退 get add . Git基础操作命令 我们创建并且初始化这个仓库以后,我们就要在里面进行操作。 Git 对于文件的增删改查存在几个状态,这些修改状态会随着我们执行Git的命令而发生变化。 untracked、…

配置mysqld(读取选项内容,基本配置),数据目录(配置的必要性,目录下的内容,具体文件介绍,修改配置)

目录 配置mysqld 读取选项内容 介绍 启动脚本 基本配置 内容 端口号 数据目录的路径 配置的必要性 配置路径 mysql数据目录 具体文件 修改配置时 权限问题 配置mysqld 读取选项内容 介绍 会从[mysqld] / [server] 节点中读取选项内容 优先读取[server] 虽然服务…

智能家居WTR096-16S录放音芯片方案,实现语音播报提示及录音留言功能

前言: 在当今社会的高速运转之下,夜幕低垂之时,许多辛勤工作的父母尚未归家。对于肩负家庭责任的他们而言,确保孩童按时用餐与居家安全成为心头大事。此时,家居留言录音提示功能应运而生,恰似家中的一位无形…

pytorch bilstm crf的教程,注意 这里不支持批处理,要支持批处理 用torchcrf这个。

### Bi-LSTM Conditional Random Field ### pytorch tutorials https://pytorch.org/tutorials/beginner/nlp/advanced_tutorial.html ### 模型主要结构: ![title](sources/bilstm.png) pytorch bilstm crf的教程,注意 这里不支持批处理 Python version…

【SickOs1.1靶场渗透】

文章目录 一、基础信息 二、信息收集 三、反弹shell 四、提权 一、基础信息 Kali IP:192.168.20.146 靶机IP:192.168.20.150 二、信息收集 端口扫描 nmap -sS -sV -p- -A 192.168.20.150 开放了22、3128端口,8080端口显示关闭 22端…

【HF设计模式】03-装饰者模式

声明:仅为个人学习总结,还请批判性查看,如有不同观点,欢迎交流。 摘要 《Head First设计模式》第3章笔记:结合示例应用和代码,介绍装饰者模式,包括遇到的问题、遵循的 OO 原则、达到的效果。 …