【Elasticsearch】昂貴算法與廉價算法

在 Elasticsearch 里,“昂貴”并不單指“CPU 時間”,而是綜合了 **CPU、內存、磁盤 I/O、網絡傳輸** 以及 **實現復雜度** 的代價。下面把常見“昂貴算法”拆開說:

1. **高計算密度的文本算法** ?
? **match_phrase + slop**(帶跨距的短語) ?
? **span_near / span_first / span_or**(跨度查詢) ?
? **script_score** 自己寫 Groovy/Painless(循環、數學函數、外部字段) ?
代價:每條文檔都要跑正則、循環或復雜數學,CPU 飆升。

2. **向量/距離計算** ?
? **dense_vector + cosineSimilarity / dotProduct** ?
? **knn search + 向量量化再打分** ?
代價:一次向量運算 O(D)(D=維度),高維(512/1024) 再乘以 window_size=500 就十幾萬浮點乘法。

3. **機器學習/學習排序 (LTR)** ?
? **rank_feature + xgboost 模型** ?
? **自定義 feature、pair-wise loss** ?
代價:每條文檔要提取幾十上百個特征 → 內存抖動 + JNI 調用。

4. **跨字段或跨索引 Join** ?
? **has_child / has_parent / nested** 多層查詢 ?
? **terms lookup** 從另一索引拉百萬 ID 列表 ?
代價:大量隨機磁盤讀 + 網絡序列化。

5. **大窗口二次腳本** ?
把 window_size 調到 5 000 甚至 50 000,再跑上述任意算法,延遲直接秒級起步。

---

一句話判斷“貴不貴”: ?
**只要該算法在單條文檔上的耗時 > 一次普通 BM25 match 的 5~10 倍,或需要額外內存/磁盤隨機讀,就可以稱為“昂貴的算法”**——放到 rescore 里,只對 Top-N 跑,能把整體成本從 O(total_docs) 降到 O(window_size)。

一句話: ?
**“不昂貴的算法” ≈ 只用倒排索引、不走復雜計算、不隨機磁盤讀、不額外占內存的查詢——典型就是最簡單的 BM25/TF-IDF 關鍵詞匹配。**

具體看 Elasticsearch 里的“便宜”操作:

| 類型 | 例子 | 便宜原因 |
|---|---|---|
| **Term 級查詢** | `term`, `terms`, `range`(數值/日期) | 直接查倒排列表,O(log N) 跳表 |
| **Match 查詢** | `match` 默認 BM25 | 純倒排 + 預計算 norm,無額外 CPU |
| **Filter 子句** | `bool.filter` | 只算位圖交集,**不計分、可緩存** |
| **常量打分** | `constant_score` | 直接給固定 1.0 分,不走 BM25 |
| **小結果集聚合** | `terms` / `date_histogram` 結果 < 幾萬 | 位圖遍歷在內存完成 |

對照“昂貴”算法(向量、腳本、嵌套、跨字段 join…),它們要么 **逐條做復雜計算**,要么 **隨機磁盤讀**,要么 **內存膨脹**;而上面這些“便宜”操作幾乎只靠 **倒排索引 + 位圖/跳表**,CPU 和內存開銷都極低。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/88622.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/88622.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/88622.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

深度學習-多分類

?開頭摘要??&#xff1a; 本文將深入探討如何使用PyTorch實現基于Softmax回歸的MNIST手寫數字識別系統。從多分類問題的核心概念出發&#xff0c;詳細解析??One-Hot編碼??技術如何將類別標簽向量化&#xff0c;剖析??交叉熵損失函數??的數學原理及其在訓練中的優化機…

JVM 類加載過程

一、加載&#xff08;Loading&#xff09;目標&#xff1a;把字節碼文件&#xff08;.class&#xff09;“讀入 JVM”&#xff0c;生成類的 “半成品”&#xff08;Class 對象&#xff09;。Bootstrap ClassLoader&#xff08;啟動類加載器&#xff09;&#xff1a;負責加載 JV…

通俗范疇論13 雞與蛋的故事番外篇

通俗范疇論13 雞與蛋的故事番外篇 在上一篇中,我們得到了雞與蛋的Set局部小范疇如下: 雞與蛋 SetSetSet 局部小范疇 如上圖所示,每個雞來自于一個蛋,每個蛋來自于一只雞,如此循環,以至于無窮… 是的,假設雞與蛋兩個對象代表的集合,都是無窮集合,這個系統就沒有問題…

記錄跟隨recyclerview滑動的指示器

老早之前做的一個功能&#xff0c;橫向recyclerview滑動時&#xff0c;底部做跟隨滑動指示器。今天代碼不用了&#xff0c;記錄下代碼。<LinearLayoutandroid:layout_width"match_parent"android:layout_height"wrap_content"android:layout_marginTop&…

快速過一遍Python基礎語法

前言 本文章是深度學習的前導課&#xff0c;對有編程基礎的小伙伴更加的友好&#xff08;C、C&#xff09;&#xff0c;如果完全沒有學過任何一門編程語言也沒有關系&#xff0c;本文章不會涉及到晦澀難懂的原理&#xff0c;只是簡單的帶大家過一遍Python的基礎語法。 下面的操…

[爬蟲實戰] 多進程/多線程/協程-異步爬取豆瓣Top250

相關爬蟲知識點&#xff1a;[爬蟲知識] 深入理解多進程/多線程/協程的異步邏輯 相關爬蟲專欄&#xff1a;JS逆向爬蟲實戰 爬蟲知識點合集 爬蟲實戰案例 逆向知識點合集 前言&#xff1a; 在之前文章中&#xff0c;我們深入探討了多進程、多線程和協程這三大異步技術的工作…

Git系列--1.初始Git

一、背景 目錄 一、背景 二、認識 三、如何在Linux上安裝Git 3.1檢測git是否存在和版本 3.2安裝和卸載git 3.2.1Centos 3.2.2Ubuntu 四、基本操作 4.1創建本地倉庫 4.2必須的配置項 4.3宏觀認識基本分區 我們會根據需求不斷更改我們的文件內容&#xff0c;但有時我們會…

QWidget的屬性

QWidget的屬性 windowOpacityAPI說明windowOpacity()獲取不透明數值&#xff0c;返回float&#xff0c;取值為0.0到1.0&#xff0c;其中0.0為全透明&#xff0c;1.0為完全不透明setWindowOpacity()設置控件的不透明數值注意點&#xff1a;窗口不透明度的變化并非精確的&#xf…

【PTA數據結構 | C語言版】后綴表達式求值

本專欄持續輸出數據結構題目集&#xff0c;歡迎訂閱。 文章目錄題目代碼題目 請編寫程序&#xff0c;求給定的后綴表達式的值。 輸入格式&#xff1a; 輸入在一行中給出一個非空后綴表達式&#xff0c;其中操作數為 int 型整數&#xff0c;操作符包括加、減、乘、除、取模。各…

裝配式建筑4.0:當房子像汽車一樣被“智造”

傳統建筑方式&#xff0c;如同手工打造藝術品一般&#xff0c;大部分工作依賴現場施工&#xff0c;工人在建筑工地進行混凝土澆筑、磚塊堆砌、鋼筋綁扎等繁雜工作。這種方式受天氣、工人技術水平等因素影響極大&#xff0c;不僅施工周期漫長&#xff0c;質量也參差不齊。據統計…

Go語言生態成熟度分析:為何Go還無法像Java那樣實現注解式框架?

近年來&#xff0c;Go語言因其性能高效、部署簡單、并發模型優秀等特性&#xff0c;成為云原生與微服務架構中的熱門語言。然而&#xff0c;在實際的企業級項目開發中&#xff0c;開發者普遍會發現一個現象&#xff1a;Go的開發效率&#xff0c;尤其在快速構建中大型業務系統時…

oc分類和swift擴展有哪些區別

目錄1. 語言環境2. 主要目的3. 核心能力對比4. 關鍵差異詳解4.1. 屬性支持4.2. Swift 擴展4.3. 初始化器4.4. 方法沖突與覆蓋4.5. 關聯類型與泛型5. 設計哲學6. 總結表在 Objective-C 和 Swift 中&#xff0c;分類&#xff08;Category&#xff09;和擴展&#xff08;Extension…

go.work

一般學習一個小東西時&#xff0c;無非兩點&#xff0c;1、怎么用&#xff1f; 2、為啥用&#xff1f;在寫一個小的項目demo時&#xff0c;忽然看到一個奇怪的東西“go.work”&#xff1f;這是啥&#xff1f;好奇&#x1f62f;&#xff0c;想知道。我是這么問AI的&#xff1a;g…

Kimi K2萬億參數開源模型原理介紹

Kimi K2 技術全解&#xff1a;1T MoE 大模型如何煉成開放智能體 文章目錄Kimi K2 技術全解&#xff1a;1T MoE 大模型如何煉成開放智能體1. 模型架構與特點&#xff1a;1 T MoE 的「大」與「省」2. 主要創新點&#xff1a;MuonClip、Agentic RL 與工具調用2.1 MuonClip 優化器&…

【CMake】CMake構建項目入門

一、CMake介紹 CMake 是一個跨平臺的自動化構建工具&#xff0c;用于管理軟件項目的編譯過程。它通過簡單的配置文件&#xff08;CMakeLists.txt&#xff09;生成特定平臺的構建文件&#xff08;如 Makefile、Visual Studio 項目&#xff09;&#xff0c;讓開發者可以專注于代…

貪心算法題解——劃分字母區間【LeetCode】

763. 劃分字母區間 本題目&#xff0c;“同一字母最多出現在一個片段中”&#xff0c;因為這句話&#xff0c;所以本質上 這道題目屬于合并區間 一、算法邏輯&#xff08;逐步思路&#xff09; ? 目標&#xff1a; 將字符串 s 劃分成盡可能多的片段&#xff0c;要求&#xf…

Python----目標檢測(使用YOLOV8網絡訓練人臉)

一、Ultralytics安裝 網址&#xff1a;主頁 -Ultralytics YOLO 文檔 Ultralytics提供了各種安裝方法&#xff0c;包括pip、conda和Docker。通過 ultralytics pip包安裝最新穩定版本的YOLOv8&#xff0c;或克隆Ultralytics GitHub 存儲庫以獲取最新版本。可以使用Docker在隔離的…

Filament引擎(三) ——引擎渲染流程

通過Filament引擎(二) ——引擎的調用及接口層核心對象的介紹我們知道&#xff0c;要在項目中使用filament&#xff0c;首先我們需要構建出filament的Engine的對象&#xff0c;然后通過filament::Engine對象實例&#xff0c;來構建其他對象&#xff0c;組裝渲染場景&#xff0c…

Oracle存儲過程導出數據到Excel:全面實現方案詳解

技術背景與需求分析 數據導出是企業級應用的核心功能,Oracle存儲過程因其高性能執行(減少網絡傳輸)、代碼復用性(封裝業務邏輯)和事務安全性(ACID保障)成為理想載體。Excel作為使用率$ \geq 95% $的辦公工具,其兼容性需求尤為突出。典型場景包括: 財務報表自動生成物…

解決el-table右下角被擋住部分

一部分展示不全&#xff0c;被遮擋&#xff0c;因為 最右邊加了fixed"right"<el-table-column fixed"right" label"操作" width"120">解決&#xff1a;1、去除fixed"right"或2、設置樣式單頁面<style lang"sc…