构建一个网络搜索引擎

39

我一直对开发网页搜索引擎感兴趣。有什么好的起点?我听说过Lucene,但我不是很熟悉Java。还有其他好的资源或开源项目吗?

我知道这是个庞大的工程,但这也是吸引我的一部分。我不想创建下一个Google,只是想创建一个可以用来搜索我可能感兴趣的子站点的东西。


这取决于你最喜欢的编程语言。Java 毫无疑问。你是否使用 asp.net、perl、python、php 等编程语言,这是在提供任何充分答案之前需要知道的重要信息 :) - Anheledir
嗨!去看看我的……一个基于lucene.net的非常简单的文件搜索程序。 - sebagomez
你尝试过nutchnet吗?这是从nutch java移植而来的端口。 - chugh97
9个回答

58
搜索引擎由几个部分组成。 广义地说,就目前而言(如果您认为可以添加更好的描述、链接等,请随意编辑):
1. 爬虫。 它会遍历网络,抓取页面,并将其中的信息存储到某个中央数据存储区。 除文本本身外,还需要记录访问时间等其他信息。 爬虫需要足够聪明,以知道何时访问某些域名,遵守 robots.txt 约定等。
2. 解析器。它读取爬虫抓取的数据,进行解析,保存所需的任何元数据,抛弃垃圾,并可能向爬虫提供下一次抓取什么内容的建议。
3. 索引器。它读取解析器解析的内容,并创建反向索引到网页上发现的术语。它可以像您想要的那样聪明 - 应用 NLP 技术来创建概念索引,交叉链接,加入同义词等。
4. 排名引擎。在给定与“苹果”匹配的数千个 URL 的情况下,如何确定哪个结果是最好的?仅索引不能为您提供该信息。您需要分析文本、链接结构以及其他您想查看的部分,并创建一些得分。这可能完全根据现有情况进行(这非常困难),或者基于一些“专家”的预先计算的概念(请参见 PageRank 等)。
5. 前端。需要某些东西来接收用户查询,访问中央引擎并响应;此内容需要在缓存结果、可能混合来自其他来源的结果等方面聪明地处理。它也有自己的问题。
建议 - 选择其中您最感兴趣的部分,下载 Lucene 或 Xapian 或任何其他开源项目,提取执行上述任务的代码段,并尝试替换它。希望,用更好的东西 :-)。

以下是一些可能有用的链接: "敏捷网络爬虫",来自爱沙尼亚的一份论文(英文版) Sphinx 搜索引擎,一种索引和搜索 API。专为大型数据库设计,但可扩展和开放式。 "信息检索",由 Manning 等人编写的关于 IR 的教科书。它很好地概述了如何构建索引,涉及到的各种问题,以及一些关于爬取等讨论。现在可以免费在线阅读!


这是我的排名引擎(elasticsearch)和前端(angularjs)的实现。 https://machinelearningblogs.com/2016/12/12/how-to-build-a-search-engine-part-1/ - Vivek Kalyanarangan

6

Xapian是另一个适合您的选择。我听说它比一些Lucene实现更具扩展性。


6

5
我觉得最重要的部分是网站的索引。制作机器人来搜索互联网并解析它们的内容。
我和一个朋友正在谈论Google和其他搜索引擎在幕后必须有多么惊人。在半秒钟内获得数百万个结果?疯了。我认为他们可能为常搜索项预设了搜索结果。
编辑: 这个网站看起来相当有趣。

他们确实会定期发表关于如何最佳缓存结果的学术论文。你只是缓存最近的答案吗?你会查看查询日志并尝试预测需要缓存和预计算的内容吗?非常有趣的东西。 - SquareCog

4
我建议从一个现有的项目开始,比如Wikia开源搜索引擎。
(我了解到Wikia搜索项目已经结束。但是我认为参与现有的开源项目是逐步进行这样规模的项目的好方法。) http://re.search.wikia.com/about/get_involved.html

1

我也对搜索引擎很感兴趣。我推荐使用Apache Hadoop MapReduce和Apache Lucene。通过Hadoop集群实现更快的速度是最好的方法。


1

如果你对了解信息检索背后的理论和实现搜索引擎的一些技术细节感兴趣,我可以推荐 Ian Witten、Alistair Moffat 和 Tim C. Bell 合著的书籍 Managing Gigabytes。 (声明:Alistair Moffat 是我的大学导师。)虽然这本书现在有点过时了(第一版于1994年出版,第二版于1999年出版——现在管理几个GB有什么难的?),但其基本理论仍然是可靠的,并且它是索引和使用压缩进行索引和检索系统的绝佳介绍。


0

0

如果你对编程不是很感兴趣,但更关心结果,这里有一种稍微不同的方法:考虑使用Google Custom Search Engine API来构建它。

优点:

  • 谷歌为您完成所有繁重的工作
  • 对于您的用户来说,界面和行为都很熟悉
  • 可以在几分钟内启动并运行
  • 具有许多自定义功能

缺点:

  • 您不需要编写代码,因此没有学习机会
  • 您想要搜索的所有内容必须是公开的,并且已经在谷歌索引中
  • 您的结果与谷歌绑定

不会准确地称之为 API... - Sean
为什么不呢?并非每个API都是一组可调用的函数。您可以将搜索引擎的XML描述托管在自己的网站上,这样您甚至不需要使用Google的Web界面。 - Tim Farley

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接