倒排索引
inverted index是搜索引擎的关键,通常我们存东西的时候是
age | gender | document_id |
18 | F | 1 |
20 | F | 2 |
18 | M | 3 |
然后做成这种形式:(感觉跟typeahead存的时候有点像)
年龄:
18 | 【1, 3】 |
20 | 【2】 |
性别:
F | 【1, 2】 |
M | 【3】 |
这时候,搜索引擎会用Trie的数据结构存起key的值(叫trem index)。每个node存起index然后能快速找到term dictionary里的项,每个dict的项存着一条list,list里存的是document的id。这样就可以快速找到某关键词所在的文章了。通常mysql的index是用b+树来存的,也就是只有term dict这一层,这个需要多次random access硬盘。这个trie是存在内存里,然后通过这个index,能快速找到list所在的硬盘位置,不用二分地找。所以快点。
下一步是怎么找出符合多个条件的项呢?例如找18岁的女生。就是用AND操作。然后这是应该想起349 Intersection of two array。因为查出来的就是两条list,18的一条,然后女生的一条,要找这两个list的intersection,然后那些就是符合多个条件的结果。
虽然这里写的是list,题也只是list的操作,但实际上存储的数据结构是skip list。其实到现在还没十分理解这个东西,只知道是一个多层的链表,上层有写express通道能快点跳过一些值。具体只能参考维基啦。
Last updated