【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
英文地址,請注明出處:http://en.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其實就是可變長數組。 初始化的時候&…