什么是倒排索引

倒排索引(Inverted index,亦称反向索引),是一种索引方法,用来存储在全文搜索下某个单词在某一个文档或某一组文档中的存储位置的映射。

倒排索引的数据结构

倒排索引是文档检索系统中最常用的一种数据据构。它包含两部分——单词词典(Term Dictionary)和倒排列表(Posting List)

其中,单词词典是用来记录所有文档的单词,记录单词到倒排列表的关系,所以单词词典一般也会比较大,为满足快速地插入与查询,通常采用 B+ 树或者哈希链表法来实现。

而倒排列表是用来记录单词对应的文档结合,由倒排索引项(Posting)组成。

倒排索引项结构主要包括以下四项内容:

  • 文档ID;
  • 词频(TF)——该单词在文档中的出现次数,用于相关性评分;
  • 位置(Position)——单词在文档中分词的位置,用于语句搜索(Phrase Query);
  • 偏移(Offset)——记录单词的开始、结束位置,用于高亮显示。

倒排索引项结构示例:

Document ID TF Position Offset
10001 2 1 <20, 32>
10002 10 23 <7, 10>

在 Elasticsearch 的 JSON 文档中的每个字段,默认情况下都有自己的倒排索引,我们可以根据需要对某些字段不做索引,优点是节省存储空间,缺点是该字段无法被搜索。

(END)