【问题标题】:Lucene crawler (it needs to build lucene index)Lucene爬虫(需要建立lucene索引)
【发布时间】:2009-10-16 23:20:38
【问题描述】:

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

有人知道这样的网络爬虫存在吗?如果答案是肯定的,我可以在哪里找到它。 天呐……

【问题讨论】:

标签: java lucene web-crawler


【解决方案1】:

您要问的是两个组成部分:

  1. 网络爬虫
  2. 基于 Lucene 的自动索引器

首先要说一句勇气:去过那里,做到了。我将从制作您自己的角度来分别处理这两个组件,因为我不相信您可以使用 Lucene 来完成您所要求的事情,而无需真正了解底层发生的事情。

网络爬虫

因此,您有一个要“爬取”以收集特定资源的网站/目录。假设它是列出目录内容的任何普通网络服务器,那么制作网络爬虫很容易:只需将其指向目录的根目录并定义收集实际文件的规则,例如“以 .txt 结尾”。非常简单的东西,真的。

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

获得所需的实际资源(例如一堆文本文件)后,您需要确定数据的类型才能知道要索引的内容以及可以安全忽略的内容。为简单起见,我假设这些是没有字段或任何内容的纯文本文件,不会深入研究,但如果您有多个字段要存储,我建议您让爬虫生成 1..n em> 具有 accessors and mutators 的专用 bean(奖励点:创建 bean immutable,不允许访问者改变 bean 的内部状态,为 bean 创建一个 copy constructor)用于其他组件。

就 API 调用而言,您应该有类似 HttpCrawler#getDocuments(String url) 的东西,它返回一个 List<YourBean> 以与实际的索引器结合使用。

基于 Lucene 的自动索引器

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

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

注意事项

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

有了这些信息,我相信您可以在不到一天的时间内制作自己的特殊 Lucene 索引器,如果您想对其进行严格测试,则需要三天。

【讨论】:

    【解决方案2】:

    看看solr search server和nutch(爬虫),都和lucene项目有关。

    【讨论】:

    • 是的,它们是相关的,但 nutch 使用的是修改后的 lucene 索引,而 solr 是另一种类型的应用程序。 Tnx 反正
    猜你喜欢
    • 1970-01-01
    • 2016-02-20
    • 2010-11-18
    • 1970-01-01
    • 2019-01-08
    • 1970-01-01
    • 1970-01-01
    • 2016-09-27
    • 1970-01-01
    相关资源
    最近更新 更多