# Thomas H. Cormen, introduction to algorithms, third edition, MIT press, 2009.
# Eva Tardos and Jon Kleinberg, Algorithm Design, Pearson, 2006.
==索引的形式==
索引的形式包括哈希表,树、整数链表和位图。
=== 哈希表(Hash Table) ===
# Crainiceanu, Adina, and Daniel Lemire. "Bloofi: Multidimensional Bloom Filters." Information Systems 54 (2015): 311-324.
=== 树索引(Tree Index) 树(Tree) ===
* [https://en.wikipedia.org/wiki/B-tree B-tree]
# Sellis, Timos, Nick Roussopoulos, and Christos Faloutsos. "The R+-Tree: A Dynamic Index for Multi-Dimensional Objects." VLDB, 1987.
=== 前向索引(forward index)和反向索引(Inverted Index) ===
文档是有许多的单词组成的,其中每个单词也可以在同一个文档中重复出现很多次,当然,同一个单词也可以出现在不同的文档中。
前向索引(forward index):从文档角度看其中的单词,表示每个文档(用文档ID标识)都含有哪些单词,以及每个单词出现了多少次(词频)及其出现位置(相对于文档首部的偏移量)。
反向索引(inverted index 或inverted files):从单词角度看文档,标识每个单词分别在那些文档中出现(文档ID),以及在各自的文档中每个单词分别出现了多少次(词频)及其出现位置(相对于该文档首部的偏移量)。
前向索引(一对多映射):文档 ---> 单词
方向索引(一对多映射):单词 ---> 文档
前向索引,又称为正排索引,反向索引,又称为倒排索引。但是正排和倒排索引的称谓,会造成误解。
搜索引擎(Search Engine)是实现信息检索(Information Retrieval)的软件。倒排索引是搜索引擎常用的数据结构。倒排索引的功能是将关键字(keyword)映射到文档(document)。倒排索引在信息检索中发挥重要作用。
在倒排索引中,每个关键词对应一个倒排链表(Inverted List),记录了该关键词出现的所有文档的编号。
倒排索引上的最重要的运算是集合交(Conjunction),并(Disjunction)和非(Negation)。
* 倒排索引在实际实现中,可以采用位图(Bitmap)与整数链表(Integer List)两种结构形式。
* 倒排索引上的交,并和非运算,对应的整数链表的操作是Intersection/Unions操作,对应位图的运算则是比特AND,OR,NOT操作。
倒排索引实现:
[https://lucene.apache.org/core/ Lucene]
[https://pypi.python.org/pypi/Whoosh Whoosh]==整数链表(Integer List)==
==== Bitmap Index ====