Nutch-2.2.1学习之七Nutch与Solr的集成

2024-01-08 04:32
文章标签 学习 2.2 集成 nutch 之七 solr

本文主要是介绍Nutch-2.2.1学习之七Nutch与Solr的集成,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Nutch以开箱的方式支持Solr,这极大的简化了NutchSolr的集成。Nutch也移除了遗留的对Tomcat运行旧的Nutch web应用程序和Apache Lucene索引的依赖。Nutch1.x2.x关于Solr的区别在于1.x版本可以选择是否使用Solr索引,这需要一步一步地进行爬取工作,而2.x则提供了更为简洁的方式——crawl脚本,直接将爬取成功的页面与Solr集成在一起。当然通过阅读crawl脚本也可以将2.x中的一步到位方式分解为若干步骤,并且选择是否由Solr建立索引。在学习如何将NutchSolr结合在一起使用之前,先看一下Solr官网的介绍。

Solr是从apacheLucene项目发展而来的流行的,非常快速的开源企业级搜索平台。主要特征包括强大的全文检索,分面搜索,近乎实时索引,动态集群,与数据库的集成,丰富的文档处理(比如wordPDF),还有地理空间搜索。Solr是高可靠、可扩展和容错的,提供分布式索引,复制和负载均衡查询,自动化的故障转移和恢复,集中管理等。Solr强化了很多世界上最大网站的搜索和导航特性。

Solr是用Java开发的,在一个诸如Jettyservlet容器中以单机模式运行全文搜索服务。Solr使用LuceneJava搜索库作为全文索引和搜索的核心,通过使用REST-like HTTP/XML andJSON APIs,使得几乎任何编程语言都可以很容易的使用Solr。使用者可以通过基于HTTP协议的XML, JSON,CSV 或者二进制将文档放在Solr中(称为索引),使用HTTPGET方法查询并且收到XML,JSON, CSV 或者二进制结果。

根据官网的介绍,可以发现Solr提供了强大的关于索引的功能,并且几乎支持所有的编程语言,而不仅仅局限于JAVA。

现在开始将Nutch与Solr结合在一起。首先从官网下载Solr版本4.5.1版本,地址为http://lucene.apache.org/solr/,然后将下载的solr-4.5.1.tgz解压到相应的目录中,该目录在稍后将使用${SOLR_HOME}引用。进入${APACHE_SOLR_HOME}/example,执行java-jar start.jar,等到solr启动完毕后,在浏览器中输入http://localhost:8983/solr/#/,进入如下图片所示的页面:

在该页面中可以发现solr的版本信息、系统信息、JVM信息等。点击左侧导航栏中的下拉选择框,选择collection1,进入下图所示的页面。在该页面中又出现了一些链接,可以点击进行相应的操作,比如进行查询。

在简单介绍了Solr的启动以及页面后,现在来看看如何修改Solr的配置文件使得Nutch爬取的网页可以被Solr索引查询。首先备份${SOLR_HOME}/example/solr/conf/schema.xm文件,然后将Nutch目录中conf目录下的schema-solr4.xml复制到${SOLR_HOME}/example/solr/conf/中,并且重命名为schema.xm,若不修改则在启动Solr会报找不到schema.xm的错误而无法启动Solr。做完这些修改后运行java -jar start.jar 重新启动Solr,然后运行bin/crawl urls sina http://localhost: 8983/solr 2进行网页的爬取并在Solr上建立索引。在控制台中可以发现,当进行dedup作业时出现问题,该作业用于删除多余的副本确保被索引的urls的唯一性。如果有人也曾遇到过类似的问题,并成功的解决了,还请多多指教。该问题是在建立索引完成之后出现的,不会特别严重的影响查看索引结果,暂时略过,后续找到解决办法再更新文章。

SOLR dedup -> http://localhost:8983/solr
/home/hadoop/nutch-2.2.1/runtime/deploy/conf:/usr/java/jdk1.6.0_32/lib/tools.jar
13/12/20 20:23:28 INFO solr.SolrDeleteDuplicates: SolrDeleteDuplicates: starting...
13/12/20 20:23:28 INFO solr.SolrDeleteDuplicates: SolrDeleteDuplicates: Solr url: http://localhost:8983/solr
13/12/20 20:23:37 WARN mapred.JobClient: No job jar file set.  User classes may not be found. See JobConf(Class) or JobConf#setJar(String).
13/12/20 20:23:47 INFO mapred.JobClient: Running job: job_201312201956_0007
13/12/20 20:23:48 INFO mapred.JobClient:  map 0% reduce 0%
13/12/20 20:24:22 INFO mapred.JobClient: Task Id : attempt_201312201956_0007_m_000000_0, Status : FAILED
java.lang.RuntimeException: java.lang.ClassNotFoundException: org.apache.nutch.indexer.solr.SolrDeleteDuplicates$SolrInputFormatat org.apache.hadoop.conf.Configuration.getClass(Configuration.java:857)at org.apache.hadoop.mapreduce.JobContext.getInputFormatClass(JobContext.java:187)at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:722)at org.apache.hadoop.mapred.MapTask.run(MapTask.java:364)at org.apache.hadoop.mapred.Child$4.run(Child.java:255)at java.security.AccessController.doPrivileged(Native Method)at javax.security.auth.Subject.doAs(Subject.java:396)at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1190)at org.apache.hadoop.mapred.Child.main(Child.java:249)
Caused by: java.lang.ClassNotFoundException: org.apache.nutch.indexer.solr.SolrDeleteDuplicates$SolrInputFormatat java.net.URLClassLoader$1.run(URLClassLoader.java:202)at java.security.AccessController.doPrivileged(Native Method)at java.net.URLClassLoader.findClass(URLClassLoader.java:190)at java.lang.ClassLoader.loadClass(ClassLoader.java:306)at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)at java.lang.ClassLoader.loadClass(ClassLoader.java:247)at java.lang.Class.forName0(Native Method)at java.lang.Class.forName(Class.java:247)at org.apache.hadoop.conf.Configuration.getClassByName(Configuration.java:810)at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:855)... 8 more

作业完成后进入Solr的管理页面,现在可以查询已经爬取到的网页了。在上图中点击query链接,出现下图所示的页面,在该页面中不做任何修改,点击下方的查询按钮,以JSON方式显示索引的内容。

可以修改q中的参数查询包含特定内容的网页,也可以选择wt中的选项定制以JSON、XML、CSV等格式显示网页内容,是可以在fl中以逗号分隔的方式定制需要显示哪些字段。在q中设置title:hadoop查询title中包含hadoop的网页,执行结果如下图所示:

上面只介绍了Solr的相当简单的一部分功能,更多更强大的功能还需要进一步学习探索,并且solrdedup作业失败的问题也需要继续研究其根源并解决。

补充,solrdedup失败的解决办法可以通过在SolrDeleteDuplicates中的Job job = new Job(getConf(), "solrdedup");后添加下面的代码解决:

job.setJarByClass(SolrDeleteDuplicates.class);

这篇关于Nutch-2.2.1学习之七Nutch与Solr的集成的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/582331

相关文章

SpringCloud集成AlloyDB的示例代码

《SpringCloud集成AlloyDB的示例代码》AlloyDB是GoogleCloud提供的一种高度可扩展、强性能的关系型数据库服务,它兼容PostgreSQL,并提供了更快的查询性能... 目录1.AlloyDBjavascript是什么?AlloyDB 的工作原理2.搭建测试环境3.代码工程1.

SpringBoot使用注解集成Redis缓存的示例代码

《SpringBoot使用注解集成Redis缓存的示例代码》:本文主要介绍在SpringBoot中使用注解集成Redis缓存的步骤,包括添加依赖、创建相关配置类、需要缓存数据的类(Tes... 目录一、创建 Caching 配置类二、创建需要缓存数据的类三、测试方法Spring Boot 熟悉后,集成一个外

Docker集成CI/CD的项目实践

《Docker集成CI/CD的项目实践》本文主要介绍了Docker集成CI/CD的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录一、引言1.1 什么是 CI/CD?1.2 docker 在 CI/CD 中的作用二、Docke

SpringBoot集成SOL链的详细过程

《SpringBoot集成SOL链的详细过程》Solanaj是一个用于与Solana区块链交互的Java库,它为Java开发者提供了一套功能丰富的API,使得在Java环境中可以轻松构建与Solana... 目录一、什么是solanaj?二、Pom依赖三、主要类3.1 RpcClient3.2 Public

SpringBoot3集成swagger文档的使用方法

《SpringBoot3集成swagger文档的使用方法》本文介绍了Swagger的诞生背景、主要功能以及如何在SpringBoot3中集成Swagger文档,Swagger可以帮助自动生成API文档... 目录一、前言1. API 文档自动生成2. 交互式 API 测试3. API 设计和开发协作二、使用

SpringBoot如何集成Kaptcha验证码

《SpringBoot如何集成Kaptcha验证码》本文介绍了如何在Java开发中使用Kaptcha生成验证码的功能,包括在pom.xml中配置依赖、在系统公共配置类中添加配置、在控制器中添加生成验证... 目录SpringBoot集成Kaptcha验证码简介实现步骤1. 在 pom.XML 配置文件中2.

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;