倒排索引
因为热爱,所以拼搏。 –RuiDer
前导必备
- Java基础
- 数据库
正常索引使用
比如一张数据库表table,有id和content两个字段,表中数据如下:
id content
1 abc
2 fg
3 ahu
4 bgf
使用id=2进行索引查找fg。
select from table where id=2;
即可查询到相应的值。
问题
现在我们可以根据数据库表中的id可以查询对应的值,但是有一些问题,
当我们想要查询fg值的id是多少或者我们想要知道哪些conten中含有a(或者b)。
这就是我们日常生活中经常使用的一个算法:当你搜索一首歌时,你可以不知道它的全名,
但是当你输入其中一部分文字时,音乐平台会自动提示或者推荐了一些相似的歌名。
解决问题的算法-----倒排索引算法
思路:(通俗的理解)
上述中的表table:
id content
1 abc
2 fg
3 ahu
4 bgf
我们的目的:通过content值或者content值中的某个字母查找对应的id
我们是不是可以根据上述的表table模拟出为下面的表table1:
content id
a 1,3
b 1,4
c 1
f 2,4
g 2,4
h 3
模拟分析:新建表是按照字母作为索引进行新建,将之前table中的content值按照content值中含有的字母进行分类,比如
第一个content索引值为a,之前的table表中含有a的content
有id=1(abc),id=3(ahu)。
这就是倒排索引算法的思路。
倒排索引
倒排索引也叫反向索引,倒序索引。
倒排索引的使用场景
- 全局搜索:比如在整个数据库中查找单词word
- 模糊查询
- 关键字查询