Elasticsearch 的倒排索引原理?

Elasticsearch 面试题发布于

一、定义

正排索引:文档 → 词列表。 倒排索引:词 → 文档列表。

二、构建过程

  1. 文档内容分词,得到词(term)。
  2. 建立 term → [doc1, doc2, ...] 的映射。
  3. 记录词频、位置等信息。

三、示例

文档1:Java 面试
文档2:Java 集合
文档3:Redis 缓存

倒排索引:
Java → [1, 2]
面试 → [1]
集合 → [2]
Redis → [3]
缓存 → [3]

查询 "Java" 直接得到文档 1、2。

四、分词

  • 英文:按空格和标点分词,转小写,去停用词。
  • 中文:IK 分词器(ik_smart 粗粒度、ik_max_word 细粒度)。
  • 也可指定 keyword 不分词(精确匹配)。

五、相关度评分

  • TF-IDF:词频 × 逆文档频率。
  • BM25:ES 默认,TF-IDF 的改进版,考虑词频饱和。