首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Lucene爬虫(它需要建立lucene索引)

Lucene爬虫(它需要建立lucene索引)
EN

Stack Overflow用户
提问于 2009-10-16 23:20:39
回答 2查看 9.5K关注 0票数 1

我正在寻找Apache Lucene网络爬虫写在java,如果可能的话,或在任何其他语言。爬虫必须使用lucene并创建有效的lucene索引和文档文件,因此这就是nutch被排除的原因。

有没有人知道这样的网络爬虫是否存在,如果答案是肯定的,我可以找到它。Tnx..。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-10-17 09:57:49

您所要求的是两个组件:

  1. Web crawler
  2. Lucene-based自动索引器

首先说一句鼓励的话:去过那里,去做那件事。我将从创建自己的角度分别处理这两个组件,因为我不相信您可以使用Lucene来做您所请求的事情,而不真正了解其背后发生了什么。

网络爬虫

因此,你有一个网站/目录,你想“爬行”通过收集特定的资源。假设它是任何列出目录内容的普通web服务器,创建web爬虫很容易:只需将其指向目录的根目录,并定义收集实际文件的规则,例如"ends with .txt“。非常简单的东西,真的。

实际的实现可能是这样的:使用HttpClient获得实际的网页/目录清单,以您认为最有效的方式解析它们,例如使用XPath从获取的文档中选择所有链接,或者使用现成的PatternMatcher类使用正则表达式解析它。如果您决定采用XPath路线,请考虑使用JDOM处理DOM,使用Jaxen处理实际的XPath。

一旦您获得了所需的实际资源,例如一堆文本文件,您需要确定数据类型,以便能够知道要索引哪些数据,以及可以安全地忽略哪些数据。为了简单起见,我假设这些是没有字段或任何内容的纯文本文件,并且不会深入讨论,但是如果您有多个字段要存储,我建议您让爬虫生成1..n个带有accessors and mutators的专用bean (优点:使bean ,不允许访问者改变bean的内部状态,为bean创建一个 )以在其他组件中使用。

在API调用方面,你应该有像HttpCrawler#getDocuments(String url)这样的东西,它返回一个与实际索引器结合使用的List<YourBean>

基于Lucene的自动索引器

除了使用Lucene的the obvious stuff之外,比如设置目录和理解它的线程模型(任何时候只允许一个写操作,即使在更新索引时也可能存在多个读操作),您当然希望将bean提供给索引。我已经链接到的5分钟教程基本上就做到了这一点,查看示例addDoc(..)方法,只需用YourBean替换字符串。

请注意,Lucene IndexWriter确实有一些清理方法,可以方便地以受控方式执行,例如,只有在将一堆文档添加到索引后才调用IndexWriter#commit()对性能有好处,然后调用IndexWriter#optimize()以确保索引不会随着时间的推移而变得非常膨胀也是一个好主意。记住也要关闭索引,以避免抛出不必要的LockObtainFailedException,因为对于Java语言中的所有IO,这样的操作当然应该在finally块中完成。

注意事项

  • 你需要记得时不时地终止你的Lucene索引的内容,否则你永远不会删除任何东西,它会变得臃肿,最终因为它自己的内部复杂性而死亡。
  • 由于线程模型,您很可能需要为索引本身创建单独的读/写抽象层,以确保在任何给定时间只有一个实例可以写入索引。
  • 由于源数据获取是通过HTTP完成的,因此您需要考虑数据的验证和可能出现的错误情况,例如服务器不可用,以避免任何形式的错误索引和客户端阻塞。
  • 您需要知道要从索引中搜索什么,以便能够决定要放入其中的内容。请注意,必须按日期进行索引,以便将日期拆分为年、月、日、小时、分钟、秒而不是毫秒值,因为当从Lucene索引执行范围查询时,[0 to 5]实际上会转换为+0 +1 +2 +3 +4 +5,这意味着范围查询很快就会消失,因为存在最大数量的查询子部分。

有了这些信息,我相信你可以在不到一天的时间里制作出你自己的Lucene索引器,如果你想严格测试它的话,可以在三天内完成。

票数 13
EN

Stack Overflow用户

发布于 2009-10-17 02:49:43

看看solr search server和nutch (crawler),它们都与lucene项目相关。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1580882

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档