Elasticsearch之倒排索引

搜索引擎

  • 正排索引
    - 文档Id到文档内容、单词的关联关系
文档ID 文档内容
1 elasticsearch是最流行的搜索引擎
2 php是世界上最好的语言
3 搜索引擎是如何诞生的
  • 倒排索引
    - 单词到文档Id的关联关系
单词 文档ID列表
elasticsearch 1
流行 1
搜索引擎 1,3
php 2
世界 2
最好 2
语言 2
如何 3
诞生 3

Elasticsearch之倒排索引

倒排索引-查询流程

  • 查询包含“搜索引擎”的文档
    - 通过倒排索引获得“搜索引擎”对应的文档Id有1和3
    - 通过正排索引查询1和3的完整内容
    - 返回用户最终结果

倒排索引组成

  • 倒排索引是搜索引擎的核心,主要包含两部分:
    - 单词词典(Term Dictionary
    - 倒排列表(Posting List)
  • 单词词典(Term Dictionary):是倒排索引的重要组成
    • 记录所有文档的单词,一般都比较大
    • 记录单词到倒排列表的关联信息
    • 实现一般使用B + Tree
  • 倒排列表(Posting List)记录了单词对应的文档集合,由倒排索引项(Posting)组成
  • 倒排列表(Posting List)主要包含如下信息:
    - 文档Id,用于获取原始信息
    - 单词评率(TF, Term Frequency),记录该单词在该文档的出现次数,用于后续相关性算分
    - 位置(Position),记录单词在文档中的分词位置(多个),用于做词语搜索(Phrase Query)
    - 偏移(Offset),记录单词在文档的开始和结束位置,用于做高亮显示

以倒排索引为例

Elasticsearch之倒排索引

单词字典与倒排列表整合在一起的结构如下:

Elasticsearch之倒排索引


es存储的是一个json格式的文档,其中包含多个字段,每个字段会有自己的倒排索引,类似下图:

Elasticsearch之倒排索引