集成Nutch和Solr

两年前集成Nutch 和Solr 这两个Apache Lucene 项目组下的子项目实在是件困难的事情,需要打很多补丁(patches),为他们的联姻搜寻各种必需的组件(required components)。今非昔比,时下,在Solr4.0 也即将浮出水面的时候,两者的结合变的相对容易。

今年早些时候发布的Nutch 1.0包含了"开盒即用"的原装的(out of the box)Solr集成。虽然有各种不同的方法来利用这个新特性,这里仅介绍其中的一种方案。本方案中,Solr 作为处理搜索结果的源和入口,有效的减轻对Nutch 的搜索负担,让Nutch 负责她最擅长的工作:抓取(crawling)和提取(extracting)内容。使用Solr 作为搜索后端,换句话说,就是允许使用所有Solr Server的高级特性,诸如:查询拼写检查(spell-check),搜索提醒(suggestion),数据复制(data-replication),查询缓存等等。

为什么使用Nutch 而不是其他的简单抓取程序?

实现本文说的类似功能的替代方法也可能是使用简单的类似于Apache Droids 抓取框架,但是Nutch 提供了我们很多很好的优势。其中,显而易见的一点是Nutch 提供了可以让你完整的实现搜索应用的特性集,其次是Nutch 的高可伸缩性(scalablity)和健壮性(robust),Nutch 运行在Hadoop 上,你可以运行在单态机器上,也可以运行在一个100台机器构成的集群(cluster)上,另外,Nutch 有很高的抓取质量,你可以配置哪些页面更重要,优先抓取,拥有丰富的APIs可以让你容易的集成Nutch 到你的应用中(可扩展性),更重要的一点是,Nutch 的内建组件,超链数据库(LinkDatabase),拥有该组件,可以大幅的提高搜索结果的关联度,Nutch 在被抓取的页面之间跟踪超链接,以便依靠內部链接来判断页面和页面之间的相关度。

Nutch和Solr的安装

首先下载我们需要的软件,Apache Solr 和 Nutch。
1、从官方 下载Solr Version 1.3.0或者从这里 下载LucidWorks for Solr。
2、解压Solr安装包。
3、下载Nutch Version 1.0 (也可以下载nightly版本 )。
4、解压Nutch安装包。

tar zxvf apache-nutch-1.0.tar.gz

5、配置Solr

简单起见,我们以Solr Example中的配置为基础

a、从apache-nutch-1.0/conf拷贝Nutch Schema到apache-solr-1.3.0/example/solr/conf目录下,覆盖掉已经存在的。
我们希望允许Solr为搜索结果创建摘要,因此我们需要存储内容以便能够索引它。

b、调整schema.xml,以便"content"字段的"stored"属性等于true。

另外,我们希望能够容易的调整查询的关联度,因此这里创建一个新的请求处理器(request handler)交dismax

c、打开apache-solr-1.3.0/example/solr/conf/solrconfig.xml文件,把下面这段粘贴进去



dismax
explicit
0.01

content^0.5 anchor^1.0 title^1.2


content^0.5 anchor^1.5 title^1.2 site^1.5


url


2<-1 5<-2 6<90%

100

*:*
title url content
0
title
0
url
regex



6、启动Solr

cd apache-solr-1.3.0/example
java -jar start.jar

7、配置Nutch
a、打开apache-nutch-1.0/conf下的nutch-site.xml,用下面的内容(我们制定了蜘蛛的名称,激活插件,限制单机一次运行抓取的最大URL数为100)替换:




http.agent.name
nutch-solr-integration


generate.max.per.host
100


plugin.includes
protocol-http|urlfilter-regex|parse-html|index-(basic|anchor)|query-(basic|site|url)|response-(json|xml)|summary-basic|scoring-opic|urlnormalizer-(pass|regex|basic)



b、打开apache-nutch-1.0/conf下的regex-urlfilter.txt,用下面的内容替换:

-^(https|telnet|file|ftp|mailto):
 
# skip some suffixes
-/.(swf|SWF|doc|DOC|mp3|MP3|WMV|wmv|txt|TXT|rtf|RTF|avi|AVI|m3u|M3U|flv|FLV|WAV|wav|mp4|MP4|avi|AVI|rss|RSS|xml|XML|pdf|PDF|js|JS|gif|GIF|jpg|JPG|png|PNG|ico|ICO|css|sit|eps|wmf|zip|ppt|mpg|xls|gz|rpm|tgz|mov|MOV|exe|jpeg|JPEG|bmp|BMP)$
 
# skip URLs containing certain characters as probable queries, etc.
-[?*!@=]
 
# allow urls in foofactory.fi domain
+^http://([a-z0-9/-A-Z]*/.)*lucidimagination.com/
 
# deny anything else
-.

8、创建一个种子列表(初始化的URL列表)

mkdir urls
echo "http://www.haoguoliang.com/" > urls/seed.txt

9、将种子URL列表导入Nutch的crawldb(注意在nutch文件夹下执行)

bin/nutch inject crawl/crawldb urls

10、生成获取(fetch)列表,以便获取和分析内容

bin/nutch generate crawl/crawldb crawl/segments

以上命令在crawl/segments目录下生成了一个新的segment目录,里边存储了抓到的URLs,下边的指令里,我们需要最新的segment目录作为参数,存储到环境变量SEGMENT里:

export SEGMENT=crawl/segments/`ls -tr crawl/segments|tail -1`

现在,启动抓取程序真正开始抓取内容

bin/nutch fetch $SEGMENT -noParsing

接下来我们分析、解析抓取下来的内容

bin/nutch parse $SEGMENT

更 新Nutch crawldb,updatedb命令会存储以上两步抓取(fetch)和分析(parse)最新的segment而得到的新的URLs到Nutch crawldb,以便后续的继续抓取,除了URLs之外,Nutch也存储了相应的页面内容,防止相同的URLs被反反复复的抓取。

bin/nutch updatedb crawl/crawldb $SEGMENT -filter -normalize

到此,一个完整的抓取周期结束了,你可以重复步骤10多次以便可以抓取更多的内容。

11、创建超链库

bin/nutch invertlinks crawl/linkdb -dir crawl/segments

12、索引所有segments中的内容到Solr中

bin/nutch solrindex http://127.0.0.1:8983/solr/ crawl/crawldb crawl/linkdb crawl/segments/*

现在,所有Nutch抓取的内容已经被Solr索引了,你可以通过Solr Admin执行查询操作了

http://127.0.0.1:8983/solr/admin 或者直接通过

http://127.0.0.1:8983/solr/nutch/?q=solr&version=2.2&start=0&rows=10&indent=on&wt=json

 

 

发送引用通告网址: http://www.haoguoliang.com/cgi-bin/mt/mt-tb.cgi/22

 

你可能感兴趣的:(软件经济,Lucene,Solr,Web,数据挖掘,搜索引擎研究,solr,basic,avi,apache,存储,components)