我一直对开发网络搜索引擎很感兴趣。什么是开始的好地方?我听说过 Lucene,但我不是 Java 大佬。还有其他好的资源或开源项目吗?
我知道这是一项艰巨的任务,但这是吸引力的一部分。我不打算创建下一个谷歌,只是我可以用来搜索我可能感兴趣的网站子集。
我一直对开发网络搜索引擎很感兴趣。什么是开始的好地方?我听说过 Lucene,但我不是 Java 大佬。还有其他好的资源或开源项目吗?
我知道这是一项艰巨的任务,但这是吸引力的一部分。我不打算创建下一个谷歌,只是我可以用来搜索我可能感兴趣的网站子集。
搜索引擎有几个部分。从广义上讲,以一种无可救药的一般方式(伙计们,如果您觉得可以添加更好的描述、链接等,请随时编辑):
爬虫。这是通过网络、抓取页面并将有关它们的信息存储到某个中央数据存储中的部分。除了文本本身之外,您还需要诸如访问它的时间等信息。爬虫需要足够聪明,以知道访问某些域的频率,遵守 robots.txt 约定等。
解析器。这会读取爬虫获取的数据,对其进行解析,保存它需要的任何元数据,丢弃垃圾,并可能就下次获取的内容向爬虫提出建议。
索引器。读取解析器解析的内容,并为网页上找到的术语创建倒排索引。它可以随心所欲地智能——应用 NLP 技术来制作概念索引、交叉链接事物、引入同义词等。
排名引擎。给定数千个与“apple”匹配的 URL,您如何确定哪个结果最好?只是索引不会为您提供该信息。您需要分析文本、链接结构以及您想查看的任何其他部分,并创建一些分数。这可以完全即时完成(这真的很难),或者基于一些预先计算的“专家”概念(参见 PageRank 等)。
前端。需要接收用户查询、命中中央引擎并做出响应;这需要对缓存结果很聪明,可能会混合来自其他来源的结果等。它有自己的一系列问题。
我的建议——选择你最感兴趣的,下载 Lucene 或 Xapian 或任何其他开源项目,取出完成上述任务之一的位,并尝试替换它。希望有更好的东西:-)。
一些可能有用的链接: “Agile web-crawler”,爱沙尼亚的一篇论文(英文) Sphinx Search engine,一个索引和搜索API。专为大型数据库设计,但模块化和开放式。 “Information Retrieval,Manning 等人的一本关于 IR 的教科书。很好地概述了索引是如何构建的,出现的各种问题,以及一些关于爬虫的讨论等。免费在线版本(目前)!
Xapian是您的另一个选择。我听说它比 Lucene 的某些实现具有更好的扩展性。
查看nutch,它是由创建 Lucene 的同一个人 ( Doug Cutting ) 编写的。
在我看来,最大的部分是网站的索引。制作机器人来搜索互联网并解析其内容。
我和一个朋友正在谈论谷歌和其他搜索引擎必须在引擎盖下有多么惊人。半秒内获得数百万个结果?疯狂的。我认为他们可能已经为常用搜索项目预设了搜索结果。
编辑: 这个网站看起来很有趣。
我将从一个现有项目开始,例如来自 Wikia 的开源搜索引擎。
[我的理解是维基搜索项目已经结束。但是,我认为参与现有的开源项目是轻松进入这种规模的事业的好方法。]
如果您有兴趣了解信息检索背后的理论以及实现搜索引擎背后的一些技术细节,我可以推荐Ian Witten、Alistair Moffat 和 Tim C. Bell所著的《管理千兆字节》一书。(披露:Alistair Moffat 是我的大学导师。)虽然现在有点过时了(第一版于 1994 年出版,第二版于 1999 年出版——现在管理千兆字节有什么难的?),基本理论仍然是合理的,而且是对索引和在索引和检索系统中使用压缩的一个很好的介绍。
我也对搜索引擎感兴趣。我推荐了 Apache Hadoop MapReduce 和 Apache Lucene。通过 Hadoop Cluster 获得更快是最好的方法。
有Lucene的端口。Zend 有一个免费提供。看看这个快速教程:http ://devzone.zend.com/node/view/id/91
如果您对它的编程不太感兴趣,但对结果更感兴趣,这里有一个稍微不同的方法:考虑使用Google 自定义搜索引擎API 构建它。
好处:
缺点: