Lucene的爬虫(它需要建立Lucene索引)(Lucene crawler (it needs

2019-08-19 11:35发布

我找了用Java编写的,如果可能的,或在任何其他语言的Apache Lucene的网络爬虫。 履带必须使用Lucene和创建有效的Lucene索引和文档文件,所以这就是为什么Nutch的消除例如原因...

有谁知道会有这样一个网络爬虫存在,且如果答案是肯定的,我可以找到它。 TNX ...

Answer 1:

什么你问的两个组成部分:

  1. 网络爬虫
  2. 基于Lucene的自动分度器

couragement首先一句话:在那里,这样做。 我会从使你自己的点分别解决这两个组件,因为我不相信,你可以使用Lucene来你所要求并没有真正理解什么是底下去的东西。

网络爬虫

所以,你必须要“爬”,通过收集特定资源网站/目录。 假设它是列出目录的内容,使得网络爬虫任何常见的Web服务器非常简单:只需将其指向的根目录,并定义收集实际的文件,如“以txt结尾”的规则。 很简单的东西,真的。

实际的实现可能是类似这样:使用HttpClient的获得实际的网页/目录列表,分析它们在你的方式找到最有效的,如使用XPath的选择从所获取的文件的所有链接,或只是使用与正则表达式解析它Java的模式和匹配器类一应俱全。 如果你决定去的XPath的路线,可以考虑使用JDOM的DOM处理和Jaxen的用于实际的XPath。

一旦你得到你想要的实际资源,如一堆文本文件,你需要确定数据的类型,以便能够知道什么索引,哪些是你可以放心地忽略。 为了简便起见,我假设这些都是纯文本文件没有字段或任何东西,不会去深入地了解,但如果你有多个字段来存储,我建议你让你的履带式生产的专业化豆1..N与存取和修改器 ( 积分:使豆不变 ,不允许存取变异bean的内部状态,创建一个拷贝构造函数为bean)中的其他组件使用。

在API调用而言,你应该有类似HttpCrawler#getDocuments(String url)返回一个List<YourBean>在联合使用以使用与实际索引。

基于Lucene的自动分度器

除了显而易见的东西,使用Lucene如建立一个目录,并了解它的线程模型( 只有一个写操作可以在任何时间,多读有可能存在,即使该指数正在更新 ),当然,你要养活你的豆索引。 我已经挂基本上五分钟指南正是这么做的,看看例子addDoc(..)方法,只是替换字符串YourBean

需要注意的是Lucene的IndexWriter类确实有一定的清除方法这是很方便的以可控的方式来执行,例如调用IndexWriter#commit()后,才一堆文件已经被添加到指数是良好的性能,然后调用IndexWriter#optimize()以确保指数不会随着时间的推移越来越臃肿巨大的太是个好主意。 一定要记住关闭指数也避免不必要的LockObtainFailedException s到被抛出,因为所有的IO在Java中这样的操作当然应该在完成finally块。

注意事项

  • 你需要记住到期的Lucene索引”内容飘飞过,否则你将永远不会删除任何东西,它会变得过于庞大,最终只是死因为其自身的内部复杂性。
  • 因为线程模型的你最有可能需要创建索引本身独立的读/写抽象层,以确保只有一个实例可以在任何给定时间写入指数。
  • 由于源数据采集通过HTTP进行,你需要考虑数据和可能的错误情况的确认,如没有可用来避免任何一种畸形的索引和客户端挂断的服务器。
  • 你需要知道你想从索引搜索,能够决定你要放进去什么。 注意索引按日期必须这样做是你,是因为从Lucene索引执行范围查询时分裂说的年,月,日,时,分,秒,而不是毫秒值的日期, [0 to 5]实际上被转化成+0 +1 +2 +3 +4 +5这意味着该范围查询死了非常快,因为有查询子部分的最大数量。

有了这个信息,我相信你可以做你自己的特殊的Lucene索引在不到一天的时间,三,如果你想严格测试。



Answer 2:

看看Solr的搜索服务器和Nutch的 (履带),两者都涉及到Lucene项目。



文章来源: Lucene crawler (it needs to build lucene index)