ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

搜索系列 · 第 03 篇——核心原理:倒排索引与 BM25

搜索系列 · 第 03 篇——核心原理:倒排索引与 BM25 倒排索引 · 分词映射 · 相关性打分 · 段管理目 录一、导读二、倒排索引原理2.1 正排 vs 倒排2.2 倒排索引结构2.3 示例三、分词器与映射3.1 Analyzer 处理流程3.2 常见分词器3.3 映射text vs keyword四、BM25 相关性打分4.1 从 TF-IDF 到 BM254.2 BM25 公式4.3 参数含义五、近实时写入与段管理5.1 写入路径5.2 段合并策略5.3 主分片与副本的一致性六、聚合分析与本篇小结6.1 三类聚合6.2 本篇小结一、导读本讲深入 Elasticsearch 内核检索为何快倒排索引结构、文本如何被拆解分词器与映射、结果如何排序BM25 相关性打分、写入如何高效近实时与段管理。理解这些是建模映射、优化查询与调优性能的基础。二、倒排索引原理2.1 正排 vs 倒排关系库与普通存储采用「正排索引」以文档为核心记录「文档包含哪些词」查询某词需逐条扫描。倒排索引反其道而行以「词项」为核心记录「每个词出现在哪些文档」。可用书籍类比正排像目录章节→页码倒排像书尾索引页关键词→页码列表查词直接翻对应页。2.2 倒排索引结构倒排索引由三部分协同组成组成内容作用词典 Dictionary所有不重复词项支持 FST 压缩定位词项倒排链倒排表 Posting List包含该词的文档 ID 列表确定命中文档位置表 Position词在文档内的词频、位置与偏移打分、短语、高亮每个词项还会记录文档频率df等统计信息供相关性打分使用。2.3 示例// 文档doc1: NoSQL 实战doc2: Elasticsearch 实战// 倒排索引词项 - 文档列表NoSQL - [1]实战 - [1, 2]Elasticsearch - [2]// 查询实战直接定位文档 1、2无需全表扫描三、分词器与映射3.1 Analyzer 处理流程文本在写入前先经「分词器」Analyzer处理由三阶段流水线构成字符过滤器Character Filter如去 HTML 标签→ 分词器Tokenizer按规则切词→ 词项过滤器Token Filter如转小写、去停用词、同义词。英文与中文的分词策略差异明显。3.2 常见分词器分词器适用说明standard通用按 Unicode 边界切分英文友好simple英文按非字母字符切分并转小写keyword不分词整段作为一个词项ik中文中文分词器smart / max_wordwhitespace特殊仅按空白切分3.3 映射text vs keyword映射Mapping定义字段类型与分词策略是「数据的 DNA」text 字段会分词并建立倒排索引用于全文检索keyword 字段不分词、按原值精确匹配用于过滤、排序与聚合。设计映射时需按查询方式决定用 text 还是 keyword常用 multi-fields 同时保留两种视图。PUT /article/_mapping{ properties: {title: { type: text, analyzer: ik_max_word },tag: { type: keyword }} }四、BM25 相关性打分4.1 从 TF-IDF 到 BM25早期 Lucene 使用 TF-IDF 打分长文档易因词频累积获得不公平高分。Elasticsearch 5.x 起默认改用 BM25Best Match 25在词频与文档长度之间取得平衡成为相关性排序的默认机制。4.2 BM25 公式BM25 对每个查询词累加得分核心公式score(D,Q) Σ IDF(qi) × (fi × (k1 1))/ (fi k1 × (1 - b b × |D| / avgdl))IDF(qi) ln(1 (N - df 0.5) / (df 0.5))# k11.2 控制词频饱和b0.75 控制长度归一化4.3 参数含义IDF逆文档频率词越稀缺得分越高抑制高频通用词。fi词在文档中的出现频率词频越高得分越高但会饱和。|D| / avgdl文档长度与平均长度之比惩罚「用长文档稀释关键词」的情况。k1、b调节参数ES 默认分别为 1.2 与 0.75。生产可用 Function Score 或自定义 similar叠加业务权重如新品加权、会员加权微调排序。五、近实时写入与段管理5.1 写入路径写入先进内存缓冲并追加 translog约 1 秒refresh生成可搜索新段flush 将段持久化落盘并清空 translog。不可变段 删除标记实现更新避免原地修改的并发锁与磁盘碎片。5.2 段合并策略随时间累积大量小段后台采用分层合并Tiered Merge按规模分级合并减少段数、提升检索与稳定性。合并触发条件通常包括段数量达到阈值、删除文档占比超过阈值、或某段过大。合并瞬时会产生额外 I/O生产常结合索引生命周期ILM与滚动索引错峰处理。5.3 主分片与副本的一致性写入由主分片负责并同步到副本检索默认在主、副本间负载均衡。通过 wait_for_active_shards 可控制至少多少活跃副本确认写入在可用性与一致性之间权衡。六、聚合分析与本篇小结6.1 三类聚合ES 内置三类聚合支撑实时分析类别代表用途指标 Metricavg / sum / max / percentiles数值统计桶 Bucketterms / date_histogram / range分组与时间分桶管道 Pipelinebucket_script / derivative基于聚合再加工6.2 本篇小结本讲厘清 ES 内核四块基石倒排索引以「词项→文档」映射换来毫秒级检索分词器与映射决定文本如何被拆解与检索BM25 在词频与文档长度间平衡出相关性排序近实时刷新与分层段合并支撑高效写入。理解这些原理是后续部署、选型与调优的基础。下一篇进入部署实操在内网环境落地 Elasticsearch 集群含高可用与一键脚本。
返回列表