倒排索引
索引的创建一般分为以下几步:
第一步:将文档交给切词组件(Tokenizer)进行切词处理
第二步:将得到的词元(Token)交给语言处理组件
第三步:将得到的词(Term)交给索引组件
第四步:由索引组件针对词建立索引
针对上述步骤,我们给出2个示例文档,加以详细说明
Document 1:Students should be allowed to go out with their friends, but not allowed to drink beer.
Document 2:My friend Jerry went to school to see his students but found them drunk which is not allowed.
第一步:切词组件处理
上述2个文档会被交给切词组件,切词组件主要针对文档进行切割,将文档中的单词一个一个切割出来,同时消除一些无意义的词,比如标点符号、英文中的"the"和"is"、中文中的"的"等。因为标点符号和一些形容词,在实际的搜索中是很少会被搜索的,所以在该步骤会剃掉这些词语,减少索引的大小
经过切割以后,可能会被切分成以下词元:
“Students”,“allowed”,“go”,“their”,“friends”,“allowed”,“drink”,“beer”,“My”,“friend”,“Jerry”,“went”,“school”,“see”,“his”,“students”,“found”,“them”,“drunk”,“allowed”
第二步:语言处理组件处理
该步骤主要针对第一步生成的词元进行自然语言同化处理,比如针对cars词元,同时生成新的词car;Student词元中的大写字母小写化,这样能够实现一个student搜索,可以同时搜索处理像Student、STUDENT、stuDENT等多种情况,经过该步骤处理后,可能会被切分成以下词:
“student”,“allow”,“go”,“their”,“friend”,“allow”,“drink”,“beer”,“my”,“friend”,“jerry”,“go”,“school”,“see”,“his”,“student”,“find”,“them”,“drink”,“allow”
正因为有了自然语言处理组件,才能使得搜索drove,drive也能被搜出来
第三步:将得到的词交给索引组件建立索引
索引组件主要做以下几件事情:
(1)、利用得到的词创建一个词典
(2)、对字典按字母顺序进行排序
(3) 、合并相同的词并建立倒排链表
在上述表中,有几个定义:
Document Frequency:表示该词出现在所有文档的总数
Frequency:表示在某一个文档中该词出现的次数
第四步:建立索引
针对最后生成的词典,进行索引的建立,至此我们发现根据搜索词,我们可以立即找到对应的文档;而且诸如drink、drunk等都可以找到同一个文档
其他细节说明
todo