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.pswp.cn/web/62992.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/62992.shtml
英文地址,請注明出處:http://en.pswp.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…

計算機組成原理(五):程序裝載

在計算機組成原理中,程序裝載(Program Loading)是指將程序從外存(如磁盤)加載到內存中,并為其運行做好準備的過程。程序裝載是實現程序從靜態存儲狀態到動態運行狀態的關鍵環節,涉及地址映射、內…

Python+OpenCV系列:模版匹配

文章目錄 1. 模板匹配基本原理2. cv2.matchTemplate() 函數函數原型: 3. 模板匹配步驟4. 單目標模板匹配示例5. 多目標模板匹配多目標模板匹配示例代碼解析: 6. 多模板匹配多模板匹配示例代碼解析 7. 總結 模板匹配是一種在圖像中尋找模板的位置的方法。…

基于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. 升級網絡設備 采用性能更高的網絡硬件是優化網絡體驗的重要基礎。選擇支持高吞吐量、低延遲的設備(如企業…

scala基礎_數據類型概覽

Scala 數據類型 下表列出了 Scala 支持的數據類型: 類型類別數據類型描述Scala標準庫中的實際類基本類型Byte8位有符號整數,數值范圍為 -128 到 127scala.Byte基本類型Short16位有符號整數,數值范圍為 -32768 到 32767scala.Short基本類型I…

力扣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…

電腦插件修復工具

DirectX修復工具 鏈接:夸克網盤分享

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 "…

前端三大框架 Vue、React 和 Angular 的市場占比分析

一、引言 ?? 隨著前端技術的迅速發展,Vue.js、React 和 Angular 已成為全球最受歡迎的三大前端框架。在國內外,不同的框架在市場中的占比和流行程度存在顯著差異。本文將從全球和中國市場的角度,對這三大框架的市場占比進行分析&#xff0…

vue3+echarts+websocket分時圖與K線圖實時推送

一、父組件代碼&#xff1a; <template> <div class"chart-box" v-loading"loading"> <!-- tab導航欄 --> <div class"tab-box"> <div class"tab-list"> <div v-for"(item, index) in tabList…

用python的flask寫的一個MQTT中轉功能,http的方式發送數據和接收數據

需求背景 給一個客戶對接人臉識別的設備&#xff0c;最后需要通知服務端進行一些消息推送。 簡單例子 # 作者 陳老師 # https://v.iiar.cn import json import paho.mqtt.client as mqtt import requests from flask import Flask, requestapp Flask(__name__)# MQTT配置 mq…

ASP.NET |日常開發中讀寫XML詳解

ASP.NET &#xff5c;日常開發中讀寫XML詳解 前言一、XML 概述1.1 定義和結構1.2 應用場景 二、讀取 XML 文件2.1 使用XmlDocument類&#xff08;DOM 方式&#xff09;2.2 使用XmlReader類&#xff08;流方式&#xff09; 三、寫入 XML 文件3.1 使用XmlDocument類3.2 使用XmlWr…