倒排索引
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
Was this helpful?