Lucene、Nutch、Solr

2019-03-27 01:16|来源: 网路

    首先,说一下三者之间的关系。

    lucene是一个做搜索用的类库。 

    nutch和solr都是基于lucene的,二者都是可直接运行的应用程序。 
  
    solr是lucene的服务器化,内嵌了jetty,提供REST接口, 
用户可以直接post数据给solr,然后由solr进行索引。 
solr不包含下载系统,用户需要负责下载,转成solr所需要的格式。 
solr还提供查询接口供用户查询。 
  
    nutch可以看成一个out-of-box的搜索引擎,包含了crawler,indexer和查询接口。 
但nutch更偏向于下载系统。 
  

    一般可以使用nutch做crawler,而使用solr做indexer和查询接口。 

    其次,看一下Nutch各个模块,以及如何将数据传输给solr。   

         Nutch 的入口 是 : Crawl 。

         主要模块:

1、Injector

将 入口  url 放入 crawldb 中。并初始化 crawldb。

2、Generator

读取crawldb中 的url,过滤出将要抓取的url列表,叫 fetchlist ,并生成相应的 segment。

3、Fetcher

将 fetchlist 作为 源,抓取页面,调用 parse 。

4、ParseSegment

分析页面(html/JS/CSS/PDF/World 等等,根据配置)得出 parse_data /parse_text / 外链。

5、CrawlDb(update)

由parse结果,更新crawldb。

6、LinkDb

分析 url 连接关系。

7、SolrIndexer

将数据传送给Solr。

       再次,看一下Nutch、Hadoop、Lucene、Solr 之间 的数据交互

      Nutch 把所有的,都按自己的重新写了一遍,NutchDocument、NutchField ,都 实现 Hadoop的 Writable 接口。这样就很容易的写到了 HDFS 上。

      Nutch 可以 用 把数据传输给 Solr

bin/nutch solrindex http://127.0.0.1:8983/solr/ crawldb -linkdb crawldb/linkdb crawldb/segments/*
       这个命令调用的是:org.apache.nutch.indexer.solr.SolrIndexer 

       在上面会 MapReduce 的配置 及启动。查看Reduce的实现,没有任何的 向Solr 写内容的代码,在初始化Job的时候NutchIndexWriterFactory.addClassToConf(job, SolrWriter.class); 有一个这样的类,SolrWriter ,在这个里面可以找到相关与Solr交互的代码。

       而Solr 里,接收请求的是:BinaryUpdateRequestHandler ,会把 Nutch 传进来的 内容 转换成 Lucene 的索引。







转自:http://blog.csdn.net/xiaoyu714543065/article/details/10374191

相关问答

更多
  • apache lucene是apache下一个著名的开源搜索引擎内核,基于Java技术,处理索引,拼写检查,点击高亮和其他分析,分词等技术。 nutch和solr原来都是lucene下的子项目。但后来nutch独立成为独立项目。nutch是2004年由俄勒冈州立大学开源实验室模仿google搜索引擎创立的开源搜索引擎,后归于apache旗下。nutch主要完成抓取,提取内容等工作。 solr则是基于lucene的搜索界面。提供XML/HTTP 和 JSON/Python/Ruby API,提供搜索入口,点击 ...
  • 恩,这个我没有集成过,但是我想在不操作数据库的基础上,是不需要修改application.xml和struts.xml这些配置文件的,只需要把爬行的xml文件配置到web.xml里面就可以了,定时爬取的话就在application.xml里面配置quartz任务。 希望能够帮到你
  • Nutch是构建网络爬虫和搜索引擎的框架。 Nutch可以完成从收集网页到建立倒排索引的整个过程。 它也可以将这些索引推送到Solr。 Solr主要是一个搜索引擎,支持分面搜索和许多其他简洁的功能。 但Solr不提取数据,你必须提供它。 因此,也许你必须要问的第一件事是在你是否有可用的索引数据(在XML中,在CMS或数据库中)。 在这种情况下,您应该只使用Solr并为其提供数据。 另一方面,如果你不得不从网络上获取数据,你可能更愿意使用Nutch。 Nutch is a framework to build ...
  • Lucene系列中没有任何项目可以本地处理PDF,但是您可以使用实用程序并写出关于如何推出自己的示例。 正如托尼上面所说,Lucene几乎可以做任何你需要的事情,但是你的时间会有很多开销。 数以千计的文件实际上并不是那么多,所以你或许可以用更轻的替代品逃脱。 也就是说,我仍然会建议您看看Solr--它比Lucene更容易设置,支持备份,复制等,以及一个非常适合您的用例的漂亮JSON接口: http: //wiki.apache.org/solr/SolJSON None of the projects in ...
  • Lucene是一个用Java构建的搜索库,而Solr和Elastic Search(ES)是使用Lucene的Web应用程序。 在大多数情况下,您更喜欢Solr或ES到Lucene,主要是因为开箱即用的机制:多个节点上的分布式搜索,复制,分片和索引管理。 因为使用自定义Java应用程序和Lucene很难实现和维护这样的机制。 你会选择Lucene: 要有更多的控制权,因为它只是一个没有严格依赖关系的jar; 你不希望被任何特定的服务器约束; 您不希望构建自动化以在生产中部署Solr或ES(使用他们的服务器, ...
  • 在signatureField标签中,我有“id”而不是“signature” true true ...
  • 使用cygwin,这是一个很好的指南,可以将它们组合在一起: http://amac4.blogspot.com/2013/07/setting-up-solr-with-apache-tomcat-be.html Use cygwin, heres an excellent guide to set them up together: http://amac4.blogspot.com/2013/07/setting-up-solr-with-apache-tomcat-be.html
  • 我有同样的经验试图在Tomcat调用中找到Lucene时间。 你要做的是: 使用VisualVM 1.2.2。 选择相关流程并按“配置文件”。 选中“设置”复选框。 这应打开“CPU设置”选项卡,其中包含您可以填写的字段。 在“从类开始分析:”中,在代码中写入一个入口点(例如com.my.company.NutchUser) 取消选中“配置新的runnables”。 选择“Profile only classes:”并在其下面写:org.apache.lucene。* org.apache.nutch。* ...
  • 您只需要配置Nutch( http.agent.name )所需的参数,并指出您想要在所需的Solr实例中索引您的内容,例如使用您只需要添加solr.server.url的bin/crawl脚本solr.server.url属性: $ bin/crawl -i -D solr.server.url=http://localhost:8983/solr/ urls/ crawl/ 2 如果您在终端中执行bin/crawl ,您将获得有关可用选项的更多信息。 这里有更全面的介绍。 对于2.x分支, bin/c ...
  • 在目前阶段,Nutch只负责抓取网页,这意味着访问网页,提取内容,找到更多链接并重复这个过程(我正在跳过很多复杂的东西,但希望你能得到这个想法) 。 爬网过程的最后一步是将数据存储在后端(ES / Solr是1.x分支上支持的数据存储)。 因此,在这个步骤中,Solr开始发挥作用,在Nutch完成其工作之后,您需要将数据存储在某处以便能够在其上执行查询:这是Solr作业。 前段时间Nutch包含了编写倒排索引的能力(正如问题中所解释的那样),但是决定(也是前一段时间)是弃用这个以支持使用Solr / ES( ...