elasticsearch
文章平均质量分 92
Elasticsearch 是一个开源的分布式 RESTful 搜索和分析引擎、可扩展的数据存储和向量数据库,能够解决不断涌现出的各种用例。作为 Elastic Stack 的核心,Elasticsearch 会集中存储您的数据,让您飞快完成搜索,微调相关性,进行强大的分析,并轻松缩放规模。
乔丹搞Python+AI
理工男一枚,十多年的IT领域的开发经验。最早从事软件实施工作开始,到软件开发,到数据处理等工作。
目前主要方向是python+AI领域
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
6.10 Elasticsearch-提 PR 规范:CLA 签署、issue 关联、Backport 流程、release note
向 Elasticsearch 官方仓库提 PR 时,代码质量只是“入场券”,真正决定合并速度的是你对社区流程的熟悉度。签署成功后,elastic/cla-check 机器人会在你 PR 里 comment “CLA check passed”。Elasticsearch 采用“main-only”开发模型,所有代码先合进 main,再由机器人挑拣到旧分支。多 issue 用换行分隔,勿写 “Fixes #12345, #67890”,机器人只认第一个。,但不用你手写,全靠 PR 标签自动生成。原创 2026-01-18 10:38:17 · 1021 阅读 · 0 评论 -
6.9 Elasticsearch-单元测试:ESSingleNodeTestCase & ESIntegTestCase
M1 芯片 + SSD 环境下,空跑一个测试方法大约 1.2 s,其中 70 % 花在 Lucene 的目录锁与快照提交上;如果加上 10 万次。把“快”与“全”分层,是 Elasticsearch 能够在保持每日千次提交的同时,仍然维持 6 小时之内完成整个 CI 的关键策略之一。选对基类,可以把单测耗时从 30 s 压到 3 s,也能把分布式缺陷在 PR 阶段就暴露出来,而不是凌晨 3 点在线上爆炸。Elasticsearch 的源码里,90 % 的“单元测试”其实都在和磁盘、网络、集群状态打交道。原创 2026-01-18 09:45:43 · 1063 阅读 · 0 评论 -
6.8 Elasticsearch-写插件:RestHandler、ActionPlugin、ClusterPlugin 全套模板
至此,一套“REST → Transport → ClusterState → PersistentTask → 数据节点执行”的完整写插件模板就闭环了。直接复制即可编译,二次开发只需替换。代码全部单文件即可编译,无额外依赖(除。(基于 8.11 源码,可直接拷贝到。原创 2026-01-17 12:36:02 · 681 阅读 · 0 评论 -
6.6 Elasticsearch-聚合流水线:AggregationBuilder → Aggregator → LeafBucketCollector
每个 shard 返回(只包含 Topshard_size的 bucket)。Coordinator 节点把所有 shard 结果合并,再按size截取最终 bucket 列表,并递归合并子聚合。此时的使命早已结束,Aggregator也只在数据节点存在,Coordinator 只看到接口。原创 2026-01-16 17:52:16 · 1337 阅读 · 0 评论 -
6.5 Elasticsearch-Painless 脚本编译:AST、字节码注入与沙箱
V观察日志出现即表示注入成功。原创 2026-01-12 06:43:27 · 338 阅读 · 0 评论 -
6.4 Elasticsearch-线程模型:Netty4 transport、search & write thread_pool
Netty4 仅负责“收发字节”,search 线程池负责“CPU 计算”,write 线程池负责“内存+磁盘写入”;三层通过队列解耦,拒绝策略只在 write 层触发。理解这一分工后,遇到 RT 抖动或 429 错误,就能快速定位是“网络→计算→存储”哪一环成为瓶颈,从而做出针对性扩容或限流决策。这三层彼此解耦,通过无界 MPSC 队列传递 Netty 的 ByteBuf,既保证“线程安全”又避免 I/O 线程被阻塞。下面按“收包→解码→派发到 search/write”这条最常被问到的路径展开。原创 2026-01-11 08:35:45 · 1025 阅读 · 0 评论 -
6.3 Elasticsearch-选主算法:Zen2 vs Raft(7.x → 8.x 演进)
只有收到半数以上节点对某版 cluster state 的 ack,该版本才被视为 committed;新主必须先把自己拉到最新 committed 版本,才能发布新状态。加入集群前,节点必须证明自己在最近 3 次发布中至少参与过 1 次,否则被视为 lagging,直接拒绝投票。双主延迟裁决网络分区时,旧主意识到自己失去半数节点后不会立即下台,而是等待(默认 30 s)确认无响应才真正让位,防止“闪断”型脑裂。弹性伸缩。原创 2026-01-10 11:24:56 · 1058 阅读 · 0 评论 -
6.2 Elasticsearch-写入链路:Index → Refresh → Flush → Merge 源码走读
下面以 8.11 分支源码为基准,按时间顺序把一次文档写入的完整旅程跑一遍,并给出可直接打断点的位置与核心字段含义。Elasticsearch 的写入链路是一条“先写内存、再写事务日志、后刷盘、最终合并”的四级流水线。可确认 flush 后旧 translog 文件是否被清理。暴露给 Searcher,是 ES 近实时搜索的精髓;做到几乎互不阻塞,值得反复走读。(translog),不保证。一起固化,是重启恢复的基石;持续整理,决定长期查询性能。四段代码环环相扣,却通过。Refresh 阶段把。原创 2026-01-09 22:17:35 · 1023 阅读 · 0 评论 -
6.1 Elasticsearch-Lucene 索引文件结构:tim、tip、doc、pos、pay
查询阶段,Lucene 先以查询词在 tip 的 FST 上做最长前缀匹配,拿到候选 Block 偏移,再到 tim 中顺序扫描该块,即可在 O(logBlockSize) 内定位词条,整体时间复杂度 ≈ O(len(term) + log BlockSize)。为了与 doc 文件对齐,pos 的 chunk 边界与 doc 的 chunk 边界完全一致,确保通过 doc 文件的 skip 指针即可同步定位到 pos 文件对应偏移,避免二次二分查找。动态调整),内部按字典序连续存储。原创 2026-01-07 19:39:57 · 774 阅读 · 0 评论 -
5.10 Elasticsearch-灾备双活:跨机房双集群 + CCR 读写分离 + GSLB 流量调度
RPO ≈ 0,RTO < 5 min,两机房同时承担写流量,任一机房整体掉线业务无感。单索引日增量 5 TB,峰值写入 800 k doc/s,查询 QPS 3w,平均响应 60 ms。合规要求:数据在两地三中心持久化,且可证明副本物理隔离。原创 2026-01-07 19:35:59 · 998 阅读 · 0 评论 -
5.9 Elasticsearch-多租户资源隔离:queue_size、search & indexing thread_pool
在 Elasticsearch 多租户(multi-tenancy)场景下,不同业务方共享同一套物理集群时,最隐蔽也最容易被忽视的风险点是线程池(thread pool)与队列(queue)的“侧漏”——一个租户的突发流量可能瞬间打满 search 或 write 线程池,导致其他租户请求被无情拒绝,整个集群出现 429(EsRejectedExecutionException)。当 rejected 持续攀升,且 CPU 利用率却不高,即可判定线程池已饱和,请求在入口层被直接拒绝。原创 2026-01-04 08:26:47 · 1061 阅读 · 0 评论 -
5.8 Elasticsearch-GitOps:把集群配置、索引模板、ILM 全部纳入 Git CI/CD
GitOps 的核心是“以 Git 为唯一事实源,让任何变更都可审计、可回滚”。把这套理念搬到 Elasticsearch 身上,就是把集群级配置、索引模板、生命周期策略(ILM)、角色权限、Ingest Pipeline 等一切“应该受控”的 JSON/YAML 全部收进 Git 仓库,再通过 CI/CD 流水线自动 apply,做到“谁合并谁负责、谁回滚谁安心”。本节给出一条可直接落地的实施路径:目录规范、工具选型、流水线编排、灰度校验、灾难回滚,全部开箱即用。,方便脚本批量遍历;原创 2026-01-04 08:15:53 · 694 阅读 · 0 评论 -
5.7 Elasticsearch-Operator 模式:ECK 在 K8s 上的滚动升级与自动扩缩容
ECK 把 Elasticsearch 特有的分布式一致性协议、分片路由、角色优先级全部沉淀到控制器代码里,用户只需要“声明目标状态”,滚动升级与自动扩缩容即可像更新 Deployment 一样安全、可回滚。结合 Prometheus 的实时指标与 Kubernetes 的弹性能力,我们首次在日志平台场景实现“白天高峰 30 节点、夜间低峰 9 节点”的无人值守模式,单集群节省 62% 云资源成本,全年零业务中断。一、为什么必须用 Operator 做升级与扩缩容。四、自动扩缩容:两种模式对比。原创 2026-01-03 08:56:28 · 928 阅读 · 0 评论 -
5.6 Elasticsearch-混沌工程:ChaosMonkey for Elasticsearch
Elasticsearch 集群一旦承载线上流量,就永远处于“部分故障”状态:磁盘慢、GC 抖动、分片重分配、节点离群、网络闪断……这些故障在 3~5 个节点的 Dev 环境很难复现,却在 200+ 节点的生产环境天天发生。传统压测只能验证“功能正确”,无法回答“故障场景下 SLA 是否仍然成立”。混沌工程把故障提前注入,逼出监控盲点、熔断死角、容量缺口,是 SLA 从“3 个 9”迈向“4 个 9”的必经之路。混沌工程不是“搞破坏”,而是把未知的未知变成已知的已知。原创 2026-01-03 08:51:26 · 1094 阅读 · 0 评论 -
5.5 Elasticsearch-容量预测:基于线性回归 + 实际业务增长因子
线性回归 + 业务增长因子不是最花哨的算法,却是 Elasticsearch 容量预测场景里“解释成本最低、工程代价最小、上线速度最快”的方案。它让运维团队第一次把“感觉要扩容”翻译成“第 37 天需要 12 台 16C64G+2TB SSD 的新节点”,预算审批通过率提升 80%,也让你在下次大促前安心睡个囫囵觉。```PyCharm 2018–2024使用指南更多技术文章见公众号: 大城市小农民。原创 2026-01-02 09:11:32 · 724 阅读 · 0 评论 -
5.4 Elasticsearch-异常检测:ML 单指标/多指标/季节性与 forecast API
Elasticsearch 的异常检测能力全部收敛在 Machine Learning(ML)模块,对外暴露的 REST 端点统一以_ml为前缀。核心思路是“无监督 + 在线增量”:先对历史数据做一次性的基线建模,随后每条新写入的实时数据都会触发增量更新,并输出异常评分(0–100)。整个计算过程在 ML 节点完成,对数据节点几乎零侵入,因此可以随集群水平扩展而线性提升吞吐。建模算法内部采用分桶(bucket)机制:用户通过。原创 2026-01-02 09:06:40 · 1426 阅读 · 0 评论 -
5.3 Elasticsearch-告警框架:Watcher & Kibana Alerting 对比
Kibana Alerting 则提供。原创 2026-01-01 09:35:15 · 692 阅读 · 0 评论 -
5.2 Elasticsearch-日志链路:Filebeat → Logstash → Elasticsearch → Kibana
复制输出的 token,在数据节点执行重启后节点自动加入集群并开启 TLS。在 Kibana 节点执行把 token 贴到kibana.yml中的,重启即生效。在中指定。原创 2026-01-01 09:03:01 · 661 阅读 · 0 评论 -
5.1 Elasticsearch-全链路监控:Elastic APM 埋点 Java/Go/Node.js
再加上 Elastic APM 提供 100% 采样率的“事务采样”与“错误采样”双通道,既保留高价值链路,又避免 100% 采样带来的存储爆炸,是中小规模集群(<500 节点)性价比最高的方案之一。Elastic APM 通过单一代理、统一协议、统一 UI,把 Java、Go、Node.js 三种主流技术栈的链路数据自动汇聚到 Elasticsearch,实现“日志-指标-追踪”三位一体。对于已用 ES 做日志检索的团队,Elastic APM 是全链路监控的最短路径。header,并设置。原创 2025-12-31 21:42:02 · 976 阅读 · 0 评论 -
4.10 Elasticsearch-与大数据生态对接:Hive/Spark/Flink connector 最佳实践
把离线或实时数据从 Hadoop/Hive、Spark、Flink 搬一份到 Elasticsearch(后文简称 ES)并不是新鲜事,但“能跑”≠“能扛”。线上搜索/报表场景对时效性、并发、字段类型、分片均衡、故障恢复都有苛刻要求;而大数据侧又讲究吞吐、并行度、Exactly-once。因此,connector 的选型、参数、写入模式、监控、回退策略必须形成一套“最佳实践”,否则极易出现“白天同步 3 亿条,晚上集群全 red”的惨剧。原创 2025-12-31 20:16:49 · 1282 阅读 · 0 评论 -
4.9 Elasticsearch-SQL & JDBC:用 Tableau 直接 SELECT * FROM index
一句话:只要让 Tableau 把 Elasticsearch 当成“会水平分片的 MySQL”,所有痛点瞬间消失。注意:6.x 时代也有“开源”SQL 插件,但语法差异大,且 JDBC 仅支持 7 以后,直接跳过即可。一句话:只要记住“JDBC URL + TDC + 只读账号”三步走,就能在 Tableau 里放心。绑定用户后,Tableau 端即可实现“库-表-列”三级授权,走 LDAP 也能无缝复用。聚合,Tableau 再拉 7 行结果即可,千万别把 2 亿行明细拉到本地再聚合。原创 2025-12-28 09:30:37 · 296 阅读 · 0 评论 -
4.8 Elasticsearch-冻结层(Frozen Tier)+ ILM 策略 90 天热温冷冰
热(hot)→ 温(warm)→ 冷(cold)→ 冰(frozen),刚好 90 天,之后要么强制删除,要么快照到对象存储长期保存。日志、指标、APM 轨迹在写入后 24 h 内被查看的概率 > 80%,7 天后降到 20%,90 天后不足 1%。环境:frozen 节点 3 × 4C8G,S3 标准存储,索引 1 TB(90 d 日志),query cache 关闭。直接把 TCO 降到原来的 15%,而 99% 查询仍可在线完成,这就是 Frozen Tier 的最大价值。原因:S3 首字节延迟高。原创 2025-12-27 10:18:44 · 1010 阅读 · 0 评论 -
4.7 Elasticsearch-Searchable Snapshot:冷数据直接搜,无需恢复
配合 ILM 自动流转,80 % 以上的日志场景可以把存储成本压缩到原来的 1/5,而查询体验仍保持在“可接受”的交互级别——真正的“冷数据直接搜,无需恢复”。Searchable Snapshot 给出第三条路:让冷数据“躺在对象存储”里,却能被 Elasticsearch 直接当成只读索引检索,秒级返回,集群本地磁盘占用下降 70 %~90 %,查询延迟 P99 从离线分钟级降到 5 s 内。推荐 S3/COS。,导致 600 段/分片,首次查询需要 600 次 GET,延迟 30 s+。原创 2025-12-27 09:09:59 · 742 阅读 · 0 评论 -
4.6 Elasticsearch-Rollup & Transform:把 100 亿 → 1 亿,查询快 100 倍
再对 Rollup 结果做 Transform,每 5 min 更新一次“host+1h”的异常得分(scripted_metric 算熵值),查询 P99 降到 0.05 s,整体提速 174×。• 业务方统一通过 data view 关联 logs*、logs_rollup、logs_metrics_1h,Kibana 自动选择最优索引模式。一句话总结:Rollup 做“T+1 归档”,Transform 做“T+0 准实时”,二者目标都是“把明细变成立方体”,但生命周期不同。4.3 查询透明路由。原创 2025-12-26 21:44:27 · 1075 阅读 · 0 评论 -
4.5 Elasticsearch-脚本化聚合:painless 语法与沙箱安全
自由度高,风险也高;通过 Stack Monitoring 观察 ScriptCompilationPerMinute,若持续>5/min,说明有人在刷 inline 脚本,立即回滚并强制走 stored script MR 流程。inline 脚本每次 md5 不同,会撑爆缓存。・反射被完全禁止,因此无法通过 ((Object) doc).getClass().getClassLoader() 绕回应用层。最灵活,可自定义 map/combine/reduce 三阶段,适合“去重计数、漏斗”等跨桶逻辑。原创 2025-12-26 21:38:59 · 628 阅读 · 0 评论 -
4.4 Elasticsearch-矩阵聚合:matrix_stats 做相关系数
每列的均值(mean)方差(variance)标准差(std_deviation)协方差矩阵(covariance matrix)皮尔逊相关系数矩阵(correlation matrix)这些统计量对于理解字段之间的线性关系非常有用,尤其在机器学习特征工程、异常检测、数据建模等场景中具有重要价值。原创 2025-12-24 21:09:34 · 1092 阅读 · 0 评论 -
4.3 Elasticsearch-百分比、采样、移动平均、季节分解
四板斧组合起来,足以把 Elasticsearch 从“搜索引擎”升级成“轻量级时序分析平台”,而无需额外引入 Spark、Flink 这类重型框架。或者 TSVB 里用 “Series Agg → Moving Average” 并勾选 “Treat gaps as zeros”,即可在 5 秒内完成平滑曲线。聚合把整条延迟分布切成 100 份,常用 P50、P90、P99、P99.9 四档即可看清“最慢 1 % 请求”到底慢到什么程度。移动平均只能降噪,无法把趋势、周期、残差拆开。原创 2025-12-20 09:52:12 · 892 阅读 · 0 评论 -
4.2 Elasticsearch-时间序列:date_histogram、composite 分页不爆内存
做深度分页时,ES 需要把全局序数(global ordinals)与每个桶的优先级队列常驻堆内,导致 O(N*M) 的内存复杂度(N = 字段基数,M = 分页深度)。此时每个桶仅 16 B(long 时间戳 + long doc_count),10 000 桶 ≈ 160 KB,可在协调节点直接缓存,GC 压力几乎为零。以及分区键滚动,保证在 100% 精准排序的前提下,内存占用从“随页码线性”降到“随并发分片数常数”。,同一游标重复执行得到的结果完全一样,实现“可重放”的分页。在上一节我们提到,用。原创 2025-12-20 09:23:58 · 626 阅读 · 0 评论 -
4.1 Elasticsearch-桶 + 指标 + 管道 聚合三位一体模型
在 ES5.x 之后,官方把“聚合(Aggregation)”正式拆成三条主线:Bucket、Metric、Pipeline。“先分堆、再量堆、再算堆间关系”的三板斧,既节省 Shard CPU,也避免 Coordinating 节点成为内存漏斗。Pipeline 之所以“不回流 Shard”,是因为它只依赖“已经算好的数字”,不需要再访问倒排索引或正排数据。Bucket 负责“分堆”,Metric 负责“量堆”,Pipeline 负责“再算一遍堆与堆之间的关系”。原创 2025-12-20 08:50:40 · 1009 阅读 · 0 评论 -
3.10 Elasticsearch-结果可解释性:explain=true 与 Lucene explain 日志
掌握“value-description”速读法,配合慢日志批量审计,就能把“为什么 A 排在 B 前面”翻译成“idf 低、tf 高、boost 小”这类可量化指标,进而把调排序从玄学变成工程。explain 机制就是把 Lucene 的打分中间结果原样透出,让工程师、产品经理甚至运营都能一眼看出“这一分是怎么丢的、那一分是怎么加的”,从而把“调排序”变成“调特征”,而不是“调感觉”。如果没有量化依据,只能靠“BM25 公式就是这样”来搪塞,很快就会被要求“把公式改掉”。原创 2025-12-17 19:57:59 · 921 阅读 · 0 评论 -
3.9 Elasticsearch-跨集群搜索(CCS)与跨集群复制(CCR)
CCS 让你“像查一个集群一样查所有集群”,CCR 让你“把一个集群的数据安全快速地搬到另一个集群”;两者配合,Elasticsearch 才真正具备了跨地域、多活、读写分离的企业级能力。更多技术文章见公众号: 大城市小农民。原创 2025-12-17 19:46:54 · 1012 阅读 · 0 评论 -
3.8 Elasticsearch-搜索模板 & Mustache 动态渲染
Elasticsearch 内置的是Mustache{{var}}占位符,直接替换;布尔/列表区块,真或循环才展开;反向区块,假才展开。Mustache 没有 if、else、>、< 等运算符,所有逻辑由调用方提前算好,再塞进 params,从根本上杜绝“脚本注入”风险。原创 2025-12-17 19:40:00 · 975 阅读 · 0 评论 -
3.7 Elasticsearch-查询性能剖析:profile API、DFS query_then_fetch
profile API 把一次查询在 Coordinator 节点和每个 Shard 上的执行过程拆成可读的“时间线”与“调用树”,粒度到 Lucene 的 Weight→Scorer→BulkScorer→TwoPhaseIterator。问题:当 Shard 之间 TF-IDF 统计差异大时,局部分数不可比,导致“好文档”被提前截断。代价:两次 RPC,多一轮序列化;场景:商品索引 1.2 亿 doc,查询“品牌=sony 且 上架时间≥now-7d”,响应 2.3 s。原创 2025-12-13 14:47:06 · 686 阅读 · 0 评论 -
3.6 Elasticsearch-深度学习排序:Learning to Rank 插件安装与特征工程
Elasticsearch Learning to Rank(LTR)插件把「特征抽取 → 模型推理 → 结果重排序」整条链路搬到 ES 内部,毫秒级响应,同时保留倒排索引的召回优势,是工业界「粗排+精排」架构的标配。至此,Elasticsearch 侧的深度学习排序链路全部打通:插件安装 → 特征工程 → 模型训练 → 线上热加载 → A/B 实验。决定粗排截断位置,线上实验表明 200 条召回再精排,点击收益 +8.7%,P99 延迟仅增加 12 ms。参数传进来即可,无需二次分词,延迟 <5 ms。原创 2025-12-13 11:36:38 · 534 阅读 · 0 评论 -
3.6 Elasticsearch-深度学习排序:Learning to Rank 插件安装与特征工程
通过 ltr 插件,Elasticsearch 从“文本检索引擎”升级为“ learned 排序平台”,把离线深度学习模型无缝搬到在线,实现毫秒级、可解释、可灰度的智能排序。如需 GPU 加速,可在本地服务化模型(torchserve/triton)再用 script_score 调用, latency 可压到 5 ms,但增加一次网络 hop。• 查询层:在 sltr 里加 “model”: “product_xgb_v2{{#ab}}_exp{{/ab}}” ,利用 mustache 变量动态切换。原创 2025-12-10 21:42:39 · 791 阅读 · 0 评论 -
3.5 Elasticsearch-向量搜索:dense_vector + cosineSimilarity(8.0+)
文本、图像、音频一旦被 Embedding 模型映射成固定维度的稠密向量,「语义相似」就等价于「向量空间中距离相近」。,Elasticsearch 8.0+ 在原生倒排索引之上叠加了 HNSW 向量索引,实现「毫秒级近似语义检索」。时,ES 会在索引阶段自动计算 L2 范数并把向量归一化,因此客户端可直接送入原始浮点数组,省去额外的归一化步骤。字段,8.0 之后正式引入基于 HNSW 的近似最近邻(ANN)检索,把原来只能暴力循环的。在写入时构建多层导航图,查询走近似 kNN,复杂度降至 O(logN)。原创 2025-12-10 21:18:41 · 1127 阅读 · 0 评论 -
3.4 Elasticsearch-地理位置:geo_distance、geo_bounding_box、geo_shape
上一节我们把“酒店-地铁站”的直线距离写进了索引,但真正的地理位置检索远不止“算个距离”这么简单:用户可能想“在地图上画个框,把框里的酒店全搜出来”,也可能发过来一个地铁线路的多边形,要求“找出所有和 2 号线相交的门店”。把这三板斧(geo_distance、geo_bounding_box、geo_shape)组合好,90% 的 LBS 检索需求都能一套 DSL 拿下,剩下 10% 交给脚本或 PostGIS 也不迟。经验:业务里“点”用 geo_point,“面/线”用 geo_shape;原创 2025-12-07 11:52:45 · 1010 阅读 · 0 评论 -
3.3 Elasticsearch-同义词、拼写纠错、Suggesters(term/phrase/completion)
同义词功能让“土豆≈马铃薯≈potato”这类映射在检索层生效,避免用户因为用词差异而漏掉文档。核心思路:把用户输入的每个词与索引里实际出现的词做编辑距离(Levenshtein)比对,返回距离 ≤。ES 没有独立的“spellcheck” API,而是借助。,前缀查询复杂度 O(k)(k 为前缀长度),毫秒级返回。,对整句打分,能纠正“空格打错”“词序颠倒”等跨词错误。拿到候选后,前端可提示“您是不是要找:马铃薯”。专为“边输入边提示”设计,数据结构是内存里的。在 term 基础上加。原创 2025-12-07 11:42:06 · 821 阅读 · 0 评论 -
3.2 Elasticsearch-multi_match、boost、function_score 实战
解释:先算 positive 得分,若满足 negative 子句,最终得分 *= 0.5。score = 相关性 * (1 + 销量/10000) * 0.8^days_from_now * 是否现货(1 or 0.5)3.2 Elasticsearch-multi_match、boost、function_score 实战。——让“搜得到”进化成“搜得准”“query”: “苹果手机”,“query”: “苹果手机”,“query”: “苹果手机”,1.3 实战:商品标题。3.3 DSL 模板。原创 2025-12-07 11:32:36 · 939 阅读 · 0 评论 -
3.1 Elasticsearch-TF-IDF vs BM25 评分公式拆解
很多老项目升级后发现“同样的查询语句,打分变了,排序也变了”,根源就在这两条公式的差异。下面把两条公式拆开到字段级别,逐行对比它们对“词频饱和”和“文档长度归一化”这两个核心问题的不同态度,并给出可直接在 Kibana Dev-Tools 里验证的实验脚本。注意:Lucene 的 TF-IDF 并不是教科书里的“纯 TF·IDF”,而是做了平方根平滑和长度归一化之后的 Practical Scoring Function,下文简称 TF-IDF。,但官方已标记为 deprecated,未来版本会移除。原创 2025-11-30 07:59:41 · 650 阅读 · 0 评论
分享