1. 程式人生 > >使用nutch和solr建立搜尋引擎

使用nutch和solr建立搜尋引擎

2012-07-03

from: http://abloz.com

author:周海漢

date:2012.7.3

一、lucene,solr,nutch,hadoop的區別和聯絡

apache lucene是apache下一個著名的開源搜尋引擎核心,基於Java技術,處理索引,拼寫檢查,點選高亮和其他分析,分詞等技術。

nutch和solr原來都是lucene下的子專案。但後來nutch獨立成為獨立專案。nutch是2004年由俄勒岡州立大學開源實驗室模仿google搜尋引擎創立的開源搜尋引擎,後歸於apache旗下。nutch主要完成抓取,提取內容等工作。

solr則是基於lucene的搜尋介面。提供XML/HTTP 和 JSON/Python/Ruby API,提供搜尋入口,點選高亮,快取,備份和管理介面。

hadoop原來是nutch下的分散式任務子專案,現在也成為apache下的頂級專案。nutch可以利用hadoop進行分散式多工抓取和分析儲存工作。

所以,lucene,nutch,solr,hadoop一起工作,是能完成一箇中型的搜尋引擎工作的。

前面有一篇《apache 搜尋引擎solr試用》,詳細描述了單獨的solr實現搜尋介面的示例。

下面的部分,基於nutch,完成網頁的抓取,並通過solr完成索引和搜尋,實現真正的完整的搜尋引擎建立流程。

二、下載安裝nutch

下載頁面:

http://www.apache.org/dyn/closer.cgi/nutch/
[[email protected]
~]$ wget http://labs.renren.com/apache-mirror/nutch/apache-nutch-1.5-bin.tar.gz Length: 46293852 (44M) [application/x-gzip] http://wiki.apache.org/nutch/NutchTutorial

安裝

[[email protected] ~]$ mkdir nutch
[[email protected] ~]$ mv apache-nutch-1.5-bin.tar.gz nutch/
[[email protected] ~]$ cd nutch/
[
[email protected]
nutch]$ tar zxvf apache-nutch-1.5-bin.tar.gz [[email protected] bin]$ chmod +x nutch

否則會出Permission denied錯誤。

將nutch加入PATH環境變數中。

[[email protected] ~]$ vi .bashrc
export NUTCH_HOME=/home/zhouhh/nutch
export PATH=$PATH:$NUTCH_HOME/bin

執行

[[email protected] ~]$ nutch
Usage: nutch [-core] COMMAND

三、抓取第一個網站

假如我想抓取http://guodo.net 修改抓取url正則,僅允許抓guodo.net上的內容。

[[email protected] nutch]$ vi conf/regex-urlfilter.txt

修改+.

# accept anything else
#+.

+^http://([a-z0-9]*.)*guodo.net/

新建urls目錄,用於存放首要抓取的url列表,我們存放http://guodo.net

[[email protected] nutch]$ mkdir urls
[[email protected] urls]$ vi seed.txt
http://guodo.net

給爬行蜘蛛取個名字

[[email protected] conf]$ cat nutch-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>




 <name>http.agent.name</name>
 <value>abloz.com's Nutch Spider</value>
</property>
</configuration>

啟動solr

[[email protected] example]$ pwd
/home/zhouhh/apache-solr-4.0.0-ALPHA/example
[[email protected] example]$ java -jar start.jar
http://hadoop48:8983/solr/#/

將nutch的schema替換原solr自帶的schema,便於搜尋

[[email protected] nutch]$ cp conf/schema-solr4.xml ../apache-solr-4.0.0-ALPHA/example/solr/conf/.
[email protected] nutch]$ cd ../apache-solr-4.0.0-ALPHA/example/solr/conf/.

備份原來的索引schema,用nutch的schema替代

[[email protected] conf]$ mv schema.xml schema.xml.bk

[[email protected] conf]$ mv schema-solr4.xml schema.xml

此時執行抓取,由於版本問題,會返回錯誤

[[email protected] nutch]$ nutch crawl urls -solr http://Hadoop48:8983/solr/ -depth 3 -topN 5
java.lang.RuntimeException: Can't find resource
: 'stopwords_en.txt' in classpath or 'solr/./conf/'

替換語言資源位置到lang下。

[[email protected] conf]$ vi schema.xml
:%s/"stopwords_en.txt"/"lang/stopwords_en.txt"/g

抓取資料 僅抓取:

[[email protected] nutch]$ nutch crawl urls -dir crawl -depth 3 -topN 5
-dir 放置爬行結果的目錄
-threads 並行抓取執行緒數
-depth 指示從首頁往下爬行連結的深度
-topN N 指示每層返回的最大頁數

爬行完,看到crawl多了幾個目錄

[[email protected] nutch]$ ls crawl
crawldb  linkdb  segments

抓取並通過solr查詢

[[email protected] nutch]$ nutch crawl urls -solr http://Hadoop48:8983/solr/ -depth 3 -topN 5
Injector: starting at 2012-09-17 15:51:04
Injector: crawlDb: crawl/crawldb
Injector: urlDir: urls

...
LinkDb: merging with existing linkdb: crawl/linkdb
LinkDb: finished at 2012-09-17 15:55:11, elapsed: 00:00:25
crawl finished: crawl

建立索引

[[email protected] nutch]$ nutch solrindex http://hadoop48:8983/solr/ crawl/crawldb -linkdb crawl/linkdb crawl/segments/*
SolrIndexer: starting at 2012-09-17 16:06:27
Indexing 13 documents
SolrIndexer: finished at 2012-09-17 16:07:50, elapsed: 00:01:23

建立索引工作時能看到SolrIndexer作為Hadoop Job在工作。

[[email protected] ~]$ jps
27771 SecondaryNameNode
27577 NameNode
27863 JobTracker
10684 Jps
10186 jar
10542 SolrIndexer

查詢 用瀏覽器進入http://hadoop48:8983/solr/#/collection1/query 在q裡面輸入“兒童”,可以得到相應查詢結果。

如非註明轉載, 均為原創. 本站遵循知識共享CC協議,轉載請註明來源