建立网络搜索引擎

时间:2020-03-06 14:30:59  来源:igfitidea点击:

我一直对开发Web搜索引擎感兴趣。什么是开始的好地方?我听说过Lucene,但是我不是Java的大个子。还有其他好的资源或者开源项目吗?

我知道这是一项艰巨的任务,但这是吸引力的一部分。我不打算创建下一个Google,而只是想用来搜索我可能感兴趣的网站的子集。

解决方案

有Lucene的港口。 Zend有一个免费的。看看这个快速教程:http://devzone.zend.com/node/view/id/91

在我看来,最大的部分是网站索引。使机器人搜索互联网并解析其内容。

我和一个朋友在谈论Google和其他搜索引擎的强大功能。不到半秒的时间就能获得数百万个结果?疯狂的。我认为他们可能已经为常用搜索项目设置了预设搜索结果。

编辑:
这个站点看起来很有趣。

Xapian是另一个选择。我听说它的扩展性比Lucene的某些实现好。

我将从一个现有项目开始,例如Wikia的开源搜索引擎。

[我的理解是Wikia搜索项目已经结束。但是,我认为参与现有的开源项目是减轻这种规模的负担的好方法。]

http://re.search.wikia.com/about/get_involved.html

搜索引擎包含多个部分。广义上讲,这是一种绝望的一般方式(人们,如果可以添加更好的描述,链接等,可以随时进行编辑):

  • 履带。这是遍历网络,抓取页面并将有关它们的信息存储到某个中央数据存储中的部分。除了文本本身之外,我们还需要诸如访问它的时间之类的东西。搜寻器必须足够聪明,才能知道多长时间访问某些域,遵守robots.txt约定等。
  • 解析器。这将读取由爬网程序获取的数据,进行解析,保存所需的任何元数据,丢弃垃圾,并可能向爬网程序建议下一次要获取的内容。
  • 索引器。读取解析器解析的内容,并为网页上的术语创建反向索引。它可以像我们想要的那样聪明-应用NLP技术制作概念索引,交叉链接事物,插入同义词等。
  • 排名引擎。给定与"苹果"匹配的数千个URL,我们如何确定哪个结果最好?如果索引没有为我们提供该信息。我们需要分析文本,链接结构以及我们想要查看的其他任何内容,并创建一些分数。这可以完全是即时进行的(这确实很难),也可以基于一些预先计算的"专家"概念来完成(请参见PageRank等)。
  • 前端。需要接收用户查询,点击中央引擎并做出响应;对于缓存结果,可能需要聪明一些,可能会混合其他来源的结果,等等。它有自己的一系列问题。

我的建议-选择我们最感兴趣的哪个,在那里下载Lucene或者Xapian或者任何其他开源项目,抽出执行上述任务之一的功能,然后尝试替换它。希望有更好的东西:-)。

一些可能有用的链接:
"敏捷的网络爬虫",来自爱沙尼亚的论文(英语)
Sphinx搜索引擎,索引和搜索API。专为大型数据库而设计,但模块化且开放式。
"信息检索,Manning等人关于IR的教科书。很好地概述了索引的构建方式,出现的各种问题以及对爬网的讨论等。免费在线版本(目前)!

如果我们对它的编程不太感兴趣,但是对结果更感兴趣,则这是一种略有不同的方法:请考虑使用Google自定义搜索引擎API进行构建。

好处:

  • Google为我们完成所有繁重的工作
  • 用户熟悉的用户界面和行为
  • 几分钟就能启动并运行
  • 大量的定制功能

缺点:

  • 我们不是在编写代码,所以那里没有学习机会
  • 我们要搜索的所有内容都必须是公开的,并且已经在Google索引中
  • 结果与Google相关

看看小结,它是由创建Lucene(道格切割)的同一个人编写的。

如果我们有兴趣学习信息检索背后的理论以及实现搜索引擎背后的一些技术细节,我可以推荐Ian Witten,Alistair Moffat和Tim C. Bell撰写的《 Managing Gigabytes》。 (公开:Alistair Moffat是我的大学主管。)尽管现在有点过时了(第一版于1994年发布,第二版于1999年-现在管理千兆字节有何困难?),但基础理论仍然是合理的,并且是很好地介绍了索引以及在索引和检索系统中使用压缩。

我也对搜索引擎感兴趣。我同时推荐了Apache Hadoop MapReduce和Apache Lucene。 Hadoop Cluster加快速度是最好的方法。