我正在构建一个小型网络搜索引擎,用于搜索大约100万个网页,我想知道构建倒排索引的最佳方法是什么?使用DBMS还是什么......?从许多不同的观点,如存储成本,性能,索引和查询的速度?而且我不想使用任何开源项目,因为我想创建自己的项目!
答案 0 :(得分:3)
大多数当前的闭源数据库管理器都具有某种全文索引功能。鉴于它的受欢迎程度,我猜大多数人都有预先编写的HTML过滤器,因此搜索<p>
之类的内容不会为每个网页提供1000次点击。
如果您想完全靠自己完成这项工作,过滤HTML可能是最难的部分。从那里,反向索引需要大量的文本处理,并产生很大的结果,但它基本上非常简单 - 您只需扫描所有文档,并构建一个单词列表及其位置(通常在过滤掉非常常见的像“一个”,“一个”,“和”之类的单词,这些不是有意义的搜索术语)然后将这些单词组合成一个大索引。
考虑到完整索引的大小,添加一个足够小的第二级索引通常很有用,可以确保它很容易适合实际内存(例如,将其限制为几百个条目)。一个非常小(但有些无效)的版本只是按字母的第一个字母,因此“A”字从0开始,“B”在12345,“C”在34567,依此类推。但这并不是很有效 - 例如,你会得到更多以“A”开头而不是“X”的词。构建索引更有效,然后选择在整个索引中均匀分布的几百个(或其他)单词。然后将其用作第一级索引。从理论上讲,你可以得到更加精细的东西,比如像B +树这样的东西,但这通常是过度的 - 在一百万份文件中,很可能你最终会得到不到十万个经常使用的单词使索引大小有很大差异。即便如此,很多条目都会出现错字,而不是真正的词......
答案 1 :(得分:1)
也许你可能想详细说明为什么你不想使用像Lucene或Sphinx这样的F / OSS工具。
答案 2 :(得分:1)
如果你还在寻找,我认为这本书有你的答案。
http://nlp.stanford.edu/IR-book/information-retrieval-book.html
答案 3 :(得分:0)
您可能希望从Hadoop开始。它将在集群上有效地分发您的索引构建。您可以使用任何语言。建议使用Java和Python。 使用Hadoop / MapReduce,您可以轻松索引您的网页。但是它们需要缓存/存储在磁盘上,并且您需要解析器/标记器来首先提取文本。网上有一些免费提供的解析器。 如果您想手动执行此操作,可以从此处开始。一旦有了索引,那么存储它就是另一项任务。