在Elasticsearch中,倒排索引是一种用于高效查询文档的技术。传统索引是从文档到词的映射,而倒排索引则是从词到文档的映射。以下是倒排索引的关键特点和工作原理

1.索引结构

词汇表(Term Dictionary)

  1. 定义:词汇表是一系列唯一关键词的集合,每个关键词都是经过分析器处理后的结果。
  2. 存储:词汇表通常按照字典顺序排序,以便快速定位和访问。
  3. 内容:每个词条(term)都有以下信息:
    词条本身
    词条的频率统计(例如TF-IDF)
    词条的偏移量(offset)

倒排列表(Posting List)

  1. 定义:每个词条对应一个倒排列表,记录了包含该词条的所有文档ID。
  2. 存储:倒排列表通常按文档ID排序,并且可以进行压缩存储。
  3. 内容:
    文档ID
    词条在文档中的位置信息
    词条在文档中的频率

    2.建立过程

    分析文档

    1.分析器:Elasticsearch使用分析器(Analyzer)对文档内容进行处理,将文本拆分成一个个词条。
    2.示例:假设文档内容为“阿里巴巴是一家中国公司”,分析器可能会将其拆分为“阿里巴巴”、“是”、“一家”、“中国”、“公司”。

    构建索引

    1.新词条:如果某个词条首次出现,则将其添加到词汇表中,并创建一个新的倒排列表。
    2.已有词条:如果某个词条已经存在,则在对应的倒排列表中添加当前文档的ID。
    3.示例:
    “手机”首次出现时,词汇表中添加“手机”,并创建一个空的倒排列表。
    第二个文档包含“手机”,则在“手机”的倒排列表中添加该文档ID。

    3. 查询优化

    查询处理

    1.解析查询:用户输入查询词后,Elasticsearch同样使用分析器将其拆分成词条。
    2.查找倒排列表:对于每个查询词条,查找其对应的倒排列表。
    3.合并结果:计算所有查询词条倒排列表的交集,得到最终的匹配文档集合。
    4.示例
    假设查询词为“华为手机”:
    查找“华为”的倒排列表文档id:[2,3]
    查找“手机”的倒排列表id:[1, 2]
    合并交集:[2]

    4. 存储与检索

    存储

    压缩:倒排列表通常采用压缩算法存储,以减少磁盘占用。
    块存储:Elasticsearch使用块存储(Block-based format)来加速读取速度。

    检索

    快速定位:通过词汇表快速定位到词条的倒排列表。
    并发读取:多个查询可以并发读取不同的倒排列表,提高查询效率。


刀枪不入的煎鸡蛋
1 声望1 粉丝