【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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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…