利用nutch、hbase和solr搭建搜索引擎

我感觉搜索引擎是互联网界最伟大的技术,它让我们在网上查询变得异常方便。

        公司近期需要搭建一个站内搜索引擎,用来方便客户查询数据。借此机会学习下搜索引擎的搭建和原理。

开源界最完善的开源环境就是利用nutch、hbase与solr搭配的。nutch用来爬取数据,hbase存取数据,solr建立索引并支持在线搜索。

由于nutch只能在类unix操作系统下运行,所以建议安装linux操作系统或其他类unix操作系统。我安装的是linuxmint17。

配置nutch相关的项目都需要依赖jdk,所以要自己安装jdk,从oracle官网下载相关jdk,建议使用jdk1.7版本。安装及配置环境变量请从网络上查找,不再赘述。

1、hbase环境搭建

从官网下载hbase安装包:http://www.apache.org/dyn/closer.cgi/hbase/

我下载的版本为hbase-0.94.27,解压到指定目录下,我在我的home目录下建立App目录,把自己解压安装的绿色软件放到此目录下。

我们把hbase的主目录成为$HBASE_HOME。

解压后,需要修改配置文件$HBASE_HOME/conf/hbase-site.xml,在节点内添加如下配置:

        
                hbase.rootdir
                file://$HBASE_HOME/data/hbase
        
        
                hbase.zookeeper.property.dataDir
                $HBASE_HOME/data/zookeeper
        


保存,然后就可以启动hbase服务了,

切换到$HBASE_HOME目录下,执行服务启动命令:

 ./bin/start-hbase.sh 

即可启动服务,通过浏览器,访问如下网址:http://localhost:60010/master-status

若可以访问如下页面,说明启动成功:

利用nutch、hbase和solr搭建搜索引擎_第1张图片


hbase有自己的shell,可以通过shell来对数据进行操作,进入shell的命令如下:

首先要进入$HBASE_HOME主目录,然后执行命令

./bin/hbase shell
进入shell后,就可以进行数据操作了,我作为测试,常用删除数据表的命令,有两条命令,先执行如下命令:

disable 'table_name'
然后执行删除命令

drop 'table_name'
其他命令请参考官方相关文档。

2、nutch-2.3环境搭建

当前版本为nutch-2.3,2.x版本没有已编译好的安装包,仅有源代码,需要自己编译。可能是因为在编译之前需要修改配置文件,而编译好的很多文件都依赖于修改的配置文件。nutch的编译需要ant,所以需要安装ant并配置环境变量。

从官方下载源代码:http://nutch.apache.org/downloads.html

解压到指定目录下,在此把nutch主目录称为$NUTCH_HOME。

nutch是通过ivy来管理包的依赖的,通过命令行进入$NUTCH_HOME,通过vim打开ivy.xml文件

vim ./ivy/ivy.xml
去掉如下代码的注释:


保存: :wq

然后打开配置文件:./conf/gora.properties

vim ./conf/gora.properties
添加如下代码:

gora.datastore.default=org.apache.gora.hbase.store.HBaseStore
保存 :wq

打开配置文件./conf/nutch-site.xml

添加如下内容:


	 storage.data.store.class
	 org.apache.gora.hbase.store.HBaseStore
	 Default class for storing data
	
	
		http.agent.name
		Your Nutch Spider
	
	
		http.accept.language
		zh-cn, en-us,en-gb,en;q=0.7,*;q=0.3
		*
	
	
		parser.character.encoding.default
		utf-8
		*
	
	
		storage.data.store.class
		org.apache.gora.sql.store.SqlStore
		*
	
	
		generate.batch.id
		*
	

保存。

配置完成,编译nutch,在主目录下,运行如下命令:

ant runtime
由于nutch依赖的很多都需要从网上下载,所以编译比较慢,需要耐心等待。若编译不成功,多数都是由于依赖的包没有下载成功,请多编译几次。

编译好后,主目录下就会多了两个目录build和runtime。

编译好的程序在runtime目录下,并且此目录下有两个文件夹:deploy和local,分别代表两种模式:部署模式和本地模式。

我们这里仅使用本地模式,部署模式请参考:http://blog.csdn.net/jediael_lu/article/details/42058553

3、solr环境搭建

从官网下载solr安装包:http://archive.apache.org/dist/lucene/solr/

由于nutch-2.3的$NUTCH_HOME/conf/schema.xml中指定支持solr4.x的版本,所以我下载的版本为:solr-4.9.1

解压到指定目录,我们把solr主目录称为$SOLR_HOME。

首先备份配置文件$SOLR_HOME/example/solr/collection1/conf/schema.xml

然后把$NUTCH_HOME/runtime/local/conf/schema.xml拷贝到$SOLR_HOME/example/solr/collection1/conf目录下,覆盖schema.xml文件。

此文件主要是抓取的数据结构定义。

配置完成后,就可以启动solr服务了。进入$SOLR_HOME/example下,执行如下命令:

java -jar start.jar
通过浏览器打开网址:http://localhost:8983/solr,显示如下界面,说明配置成功:

利用nutch、hbase和solr搭建搜索引擎_第2张图片

在昨天的core Selector中选择collection1,里面有通过solr执行查询和编辑功能。

清除索引

1、打开documents,在页面里选择Document Type 为XML,然后在Documents里输入:

清除指定索引:

id:1


清除所有索引:

*:*


4、开启服务

hbase 服务和solr服务都启动后,就可以通过nutch抓取数据了。

在目录$NUTCH_HOME/runtime/local下建立urls文件夹,并在此文件夹下建议seed.txt文件,里面保存的是要抓取的网站地址,例如:http://www.cnblogs.com

然后执行./bin/crawl命令抓取数据,命令格式如下:

Usage: crawl   [] 
:放置种子文件的目录
 :抓取任务的ID
:用于索引及搜索的solr地址
:迭代次数,即抓取深度

例如:

./bin/crawl ./urls cnblogs http://localhost:8983/solr 2
命令执行过后,在hbase的站点可以查到相应数据结构,如下图:

利用nutch、hbase和solr搭建搜索引擎_第3张图片


在solr站点可以搜索相应数据,如下图:

利用nutch、hbase和solr搭建搜索引擎_第4张图片

5、总结

其实,我配置此环境,也是折腾了好几天,其中发现的问题如下:
1) nutch-2.3对mysql的支持不够好,gora-core-0.5与gora-sql-0.1.1会产生冲突,nutch-2.2.1支持的比较好。
2)当前的nutch-2.3版本仅支持solr-4.x,对solr-5.x支持不够,可能是因为solr-5.x变动比较大,我部署的solr-5.x环境不再陌生生成默认的core:collection1,需要自己创建,与nutch-2.3集成总是出现错误,最后放弃。
3)nutch-2.3抓取http://www.cnblogs.com成功,但抓取http://www.csdn.net一直不成功,应该是过滤配置的问题,考虑修改$NUTCH_HOME/conf/regex-urlfilter.txt。
4)为了让solr更好的支持中文检索,需要配置中文分词器插件,我选择的是 mmseg4j。配置比较简单,
可以参考:https://github.com/chenlb/mmseg4j-solr
http://www.cnblogs.com/henghengdh/p/3478459.html
  配置完毕后,重新建立索引,或重新抓取数据,这就需要上面讲的删除hbase数据和删除solr索引的操作了。

此文到此结束,希望对大家有所帮助。

你可能感兴趣的:(开源框架)