如何为快速搜索索引文件?

Unk*_*own 7 algorithm indexing search

如今,微软和谷歌将索引你硬盘上的文件,以便你可以快速搜索他们的内容.

我想知道的是他们是如何做到的?你能描述算法吗?

Wil*_*ung 12

简单的情况是倒排索引.

最基本的算法很简单:

  • 扫描文件中的单词,创建一个唯一单词列表
  • 规范化并过滤单词
  • 将该单词与索引中的文件绑定

事情变得棘手,但基本原理是相同的.

通过"规范化和过滤"这些词,我的意思是将所有内容转换为小写,删除常见的"停用词"(if,if,in等),可能是"词干"(删除动词和复数的常用后缀等) ).

之后,您将获得该文件的唯一单词列表,您可以构建索引.

存在用于减少存储的优化,用于检查单词的局部性的技术(例如,文档中"此"附近的"此").

但是,这是它的基本方式.


Squ*_*Cog 10

这是一个非常基本的描述; 了解更多详情,您可以阅读这本教材(网上):http://informationretrieval.org/ ¹

1).对于所有文件,请创建索引.索引由数据集中出现的所有唯一单词组成(称为"语料库").每个单词都与文档ID列表相关联; 每个文档id指的是包含该单词的文档.

变化:有时当您生成索引时,您要忽略停用词("a","the"等).但是你必须小心("成为或不成为"是一个由停用词组成的真实查询).

有时你也会说出这些话.这对使用后缀和前缀的非英语语言的搜索质量有更大的影响.

2)当用户输入查询时,查找相应的列表并合并它们.如果它是一个严格的布尔查询,那么该过程非常简单 - 对于AND,docid必须出现在所有单词列表中,对于OR,至少一个单词列表等.

3)如果你想对你的结果进行排名,有很多方法可以做到这一点,但基本的想法是使用文档中出现单词的频率,与你期望在任何单词中出现的频率进行比较.语料库中的文档,作为文档或多或少相关的信号.见教科书.

4)您还可以存储单词位置以推断短语等.

其中大部分与桌面搜索无关,因为您对召回(包括该术语的所有文档)比排名更感兴趣.


¹之前在http://www-csli.stanford.edu/~hinrich/information-retrieval-book.html上,可通过回击机访问