关闭

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

1026人阅读 评论(0) 收藏 举报
分类:

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

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

开源界最完善的开源环境就是利用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,在节点<configuration>内添加如下配置:

        <property>
                <name>hbase.rootdir</name>
                <value>file://$HBASE_HOME/data/hbase</value>
        </property>
        <property>
                <name>hbase.zookeeper.property.dataDir</name>
                <value>$HBASE_HOME/data/zookeeper</value>
        </property>


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

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

 ./bin/start-hbase.sh 

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

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


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
去掉如下代码的注释:

<dependency org="org.apache.gora" name="gora-hbase" rev="0.5" conf="*->default" />

保存::wq

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

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

<span style="color: rgb(51, 51, 51); font-family: 'Source Code Pro', monospace; font-size: 14px; line-height: 20.2999992370605px; white-space: pre; background-color: rgba(128, 128, 128, 0.0470588);">gora</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box; font-family: 'Source Code Pro', monospace; font-size: 14px; line-height: 20.2999992370605px; white-space: pre; background-color: rgba(128, 128, 128, 0.0470588);">.datastore</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box; font-family: 'Source Code Pro', monospace; font-size: 14px; line-height: 20.2999992370605px; white-space: pre; background-color: rgba(128, 128, 128, 0.0470588);">.default</span><span style="color: rgb(51, 51, 51); font-family: 'Source Code Pro', monospace; font-size: 14px; line-height: 20.2999992370605px; white-space: pre; background-color: rgba(128, 128, 128, 0.0470588);">=org</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box; font-family: 'Source Code Pro', monospace; font-size: 14px; line-height: 20.2999992370605px; white-space: pre; background-color: rgba(128, 128, 128, 0.0470588);">.apache</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box; font-family: 'Source Code Pro', monospace; font-size: 14px; line-height: 20.2999992370605px; white-space: pre; background-color: rgba(128, 128, 128, 0.0470588);">.gora</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box; font-family: 'Source Code Pro', monospace; font-size: 14px; line-height: 20.2999992370605px; white-space: pre; background-color: rgba(128, 128, 128, 0.0470588);">.hbase</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box; font-family: 'Source Code Pro', monospace; font-size: 14px; line-height: 20.2999992370605px; white-space: pre; background-color: rgba(128, 128, 128, 0.0470588);">.store</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box; font-family: 'Source Code Pro', monospace; font-size: 14px; line-height: 20.2999992370605px; white-space: pre; background-color: rgba(128, 128, 128, 0.0470588);">.HBaseStore</span>
<span style="font-family: Arial, Helvetica, sans-serif;">保存 :wq</span>

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

添加如下内容:

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

保存。

配置完成,编译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,显示如下界面,说明配置成功:



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

清除索引

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

清除指定索引:

<delete><query>id:1</query></delete><commit/>


清除所有索引:

<delete><query>*:*</query></delete><commit/>


4、开启服务

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

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

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

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

例如:

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



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


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索引的操作了。

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

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:454959次
    • 积分:4512
    • 等级:
    • 排名:第6538名
    • 原创:82篇
    • 转载:76篇
    • 译文:1篇
    • 评论:58条
    最新评论
    java学习