什么是反向索引?(很多文章也称为倒排索引)
索引技术主要有以下3种: 反向索引,后缀数组和签名文件。其中, 反向索引技术在当前大多数的信息检索系统中得到了广泛的应用, 它对于关键词的搜索非常有效, 在lucene中也是使用的这种技术。后缀数组技术在短语查询中具有很快的速度, 但是这样的数据结构在构造和维护时都比较复杂一些。签名文件技术在20世纪80年代比较流行, 但是后来反向索引技术逐渐超越了它。
反向索引是目前搜索引擎公司对搜索引擎最常用的存储方式, 也是搜索引擎的核心内容, 反向索引源于实际应用中需要根据属性的值来查找记录。这种索引表中的每一项都包括一个属性值和具有该属性值的各记录的地址。由于不是由记录来确定属性值, 而是由属性值来确定记录的位置, 因而称为反向索引。反向索引是以关键字和文档编号结合, 并以关键字作为主键的索引结构。
应用举例
Solr 使用了 Lucene 的反响索引为【快速搜索】提供动力。虽然我们不会深入介绍太多 Luncene 内部的数据结构,但是了解反向索引的【基本结构】还是非常有必要的。
回想一下前面用过的搜索书籍的例子,我们可以在下表中看到索引是如何将关键字映射到文档的:
原始文档(传统的数据库) | |
---|---|
文档编号 | 内容字段 |
1 | A Fun Guide to Cooking |
2 | Decorating Your Home |
3 | How to Raise a Child |
4 | Buying a New Car |
5 | Buying a New Home |
6 | The Beginner’s Guide to Buying a House |
7 | Purchasing a Home |
8 | Becoming a New Home Owner |
9 | How to Buy Your First House |
Lucene 反向索引文档 | |
---|---|
关键字 | 文档编号 |
a | 1,3,4,5,6,7,8 |
becoming | 8 |
beginner’s | 6 |
buy | 9 |
buying | 4,5,6 |
car | 4 |
child | 3 |
cooking | 1 |
decorating | 2 |
first | 9 |
fun | 1 |
guide | 1,6 |
home | 2,5,7,8 |
house | 6,9 |
how | 3,9 |
new | 4,5,8 |
owner | 8 |
purchasing | 7 |
raise | 3 |
the | 6 |
to | 1,6,9 |
your | 2,9 |
传统的数据库表示文档需要使用文档 ID 来映射文档中包含了关键字的一个或多个字段,而反向索引刚好和这种方式相反(因此叫做反向索引),它映射关键字到包含了这个关键字的文档ID。你可以通过上面的表格看到,原始数据通过空格分开,并且全部转换成了小写字母后存入了反向索引,而其它一切都保持不变。还要注意的是,不仅仅是上面的这些简单的信息,另外附加的一些文本内容也有可能被添加到反向索引。所有的关键字可以在进行内容分析的时候进行修改,添加或删除。
最后还有两个关于反向索引的细节需要了解:
- 所有在索引中的关键字可以映射到一个或多个文档。
- 反向索引中的关键字按照字典顺序升序排列。
好了,现在我们已经对反向索引有个大致的了解。更多细节部分可查看 Lucene 相关资料。