我感觉搜索引擎是互联网界最伟大的技术,它让我们在网上查询变得异常方便。
公司近期需要搭建一个站内搜索引擎,用来方便客户查询数据。借此机会学习下搜索引擎的搭建和原理。
开源界最完善的开源环境就是利用nutch、hbase与solr搭配的。nutch用来爬取数据,hbase存取数据,solr建立索引并支持在线搜索。
由于nutch只能在类unix操作系统下运行,所以建议安装linux操作系统或其他类unix操作系统。我安装的是linuxmint17。
配置nutch相关的项目都需要依赖jdk,所以要自己安装jdk,从oracle官网下载相关jdk,建议使用jdk1.7版本。安装及配置环境变量请从网络上查找,不再赘述。
从官网下载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_HOME目录下,执行服务启动命令:
./bin/start-hbase.sh
若可以访问如下页面,说明启动成功:
hbase有自己的shell,可以通过shell来对数据进行操作,进入shell的命令如下:
首先要进入$HBASE_HOME主目录,然后执行命令
./bin/hbase shell进入shell后,就可以进行数据操作了,我作为测试,常用删除数据表的命令,有两条命令,先执行如下命令:
disable 'table_name'然后执行删除命令
drop 'table_name'其他命令请参考官方相关文档。
当前版本为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" />
然后打开配置文件:./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>
添加如下内容:
<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
从官网下载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/>
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站点可以搜索相应数据,如下图:
本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。