我正在开展一个学术项目(搜索引擎),这个搜索引擎的主要功能是:
1/-crawling
2/-storing
3/-indexing
4/-page ranking
我的搜索引擎将抓取的所有网站都在本地可用,这意味着它是 Intranet搜索引擎。
存储抓取工具找到的文件后,需要快速提供这些文件以用于缓存目的。
所以我想知道存储和检索这些文件的最快方法是什么?
出现的第一个想法是使用FTP或SSH,但这些协议是基于连接的协议,连接,搜索文件和获取文件的时间很长。
我已经阅读了谷歌的解剖学,我看到他们使用数据存储库,我想做同样的但我不知道如何。
注意:我使用Linux / debian,搜索引擎后端使用C / C ++编码。 帮助!
答案 0 :(得分:0)
存储单个文件非常简单 - wget -r http://www.example.com
将存储example.com的整个(可抓取)内容的本地副本。
当然,请注意生成的页面,根据您访问页面的时间(或从何处),内容会有所不同。
另一件需要考虑的事情是,也许你真的不想自己存储所有页面,而只是转发到实际包含页面的网站 - 这样,你只需要存储对哪个页面包含什么内容的引用单词,而不是整个页面。由于很多页面都会有很多重复的内容,因此您只需要在数据库中存储唯一的单词以及包含该单词的页面列表(如果您还过滤掉几乎每个页面上出现的单词,例如“if” “,”和“,”它“,”到“,”做“等,您可以减少需要存储的数据量。计算每个页面上每个单词的数量,然后查看比较不同的页面,找到无法搜索的页面。
答案 1 :(得分:0)
好吧,如果程序要在运行期间不断运行,你可以将页面存储在RAM中 - 抓住一个GB的RAM,你就可以存储很多页面。这比将它们缓存到硬盘要快得多。
我从问题中收集到用户与搜索引擎位于不同的计算机上,因此缓存。也许我在这里忽略了一些明显的东西,但是你不能仅通过用户和搜索引擎之间建立的连接向他们发送HTML吗?毕竟,文本在数据方面是非常轻的,所以它不应该对连接造成太大的压力。