Elasticsearch 什么是正向索引?什么是倒排索引?

参考回答

Elasticsearch(以及全文检索领域)中,正向索引倒排索引 是两种核心的数据结构,用于存储和搜索文档内容。


1. 正向索引

正向索引 是按文档存储内容的一种索引方式,即记录文档的 ID 和内容的映射关系。

工作原理
1. 每个文档被存储为一条记录,记录包含文档的唯一标识符(ID)和文档的完整内容。
2. 要查找某个关键词时,需要逐个文档扫描内容,找到包含关键词的文档。

优点
– 文档的内容完整存储,便于直接读取和处理。

缺点
– 搜索效率低,需要遍历每个文档,特别是在关键词搜索时,性能较差。

示例

文档 ID 文档内容
1 “Elasticsearch 是搜索引擎”
2 “Elasticsearch 使用倒排索引”
  • 如果搜索 “倒排索引”,需要扫描所有文档内容,找到包含该词的文档。

2. 倒排索引

倒排索引 是一种为关键词建立索引的存储方式,即记录每个关键词与包含该关键词的文档 ID 的映射关系。

工作原理
1. 对文档的内容进行分词,将其拆分成关键词(terms)。
2. 为每个关键词创建一个记录,标记出包含该关键词的文档列表。
3. 搜索时直接查找关键词对应的文档列表,效率极高。

优点
– 搜索效率高,尤其适合全文检索和关键词查询。
– 不需要逐个扫描文档内容,大大减少查询时间。

缺点
– 不存储文档的完整内容,仅存储关键词到文档的映射,需要配合其他数据结构存储完整内容。

示例
文档:
– Doc1: “Elasticsearch 是搜索引擎”
– Doc2: “Elasticsearch 使用倒排索引”

倒排索引结构:

关键词 文档列表
Elasticsearch Doc1, Doc2
Doc1
搜索引擎 Doc1
使用 Doc2
倒排索引 Doc2
  • 搜索 “倒排索引” 时,直接定位到 Doc2。

3. 正向索引与倒排索引的对比

特性 正向索引 倒排索引
存储结构 按文档存储内容 按关键词存储文档映射
搜索效率 低,需要逐个扫描文档 高,直接查找关键词对应的文档列表
存储需求 存储文档的完整内容 存储关键词与文档 ID 的映射
适用场景 适合逐个读取文档的场景 适合关键词搜索和全文检索的场景

4. Elasticsearch 中的应用

  1. 倒排索引是核心
    • Elasticsearch 的全文检索完全基于倒排索引。
    • 每个字段都会生成倒排索引,存储关键词到文档的映射。
  2. 正向索引的补充
    • Elasticsearch 使用正向索引存储文档的完整内容(即 _source 字段)。
    • _source 用于返回查询结果时获取文档的完整内容,但不参与实际搜索。

5. 示例分析

假设有以下文档:

  • Doc1: “Elasticsearch 是一个搜索引擎”
  • Doc2: “搜索引擎使用倒排索引”

正向索引存储

文档 ID 文档内容
Doc1 “Elasticsearch 是一个搜索引擎”
Doc2 “搜索引擎使用倒排索引”

倒排索引存储

关键词 文档列表
Elasticsearch Doc1
Doc1
一个 Doc1
搜索引擎 Doc1, Doc2
使用 Doc2
倒排索引 Doc2
  • 搜索 “搜索引擎”
    • 根据倒排索引直接找到 Doc1 和 Doc2。
  • 返回文档内容
    • Elasticsearch 会使用正向索引(_source)提取完整的文档内容。

6. 总结

  • 正向索引
    • 按文档存储内容,适合逐个文档处理,但搜索效率低。
  • 倒排索引
    • 按关键词存储文档映射,是 Elasticsearch 的核心,用于高效的全文检索。

在 Elasticsearch 中,正向索引和倒排索引相辅相成:倒排索引用于高效搜索,正向索引用于返回完整的文档内容,从而实现高性能的全文检索引擎。

发表评论

后才能评论