Nutch介绍
Nutch是一个开源的WEB搜索引擎,能提供高质量的搜索服务。
对于一些内部系统或中小型网站来说是一个不错的全文搜索解决方案。
Nutch的部署
最新版本的Nutch可从Nutch的官网获取。下载后直接解压就可以进行使用。 由于我使用的是windows系统,这里以windows下部署进行介绍。
Nutch爬虫设置
Nutch本身包含一个对目标站点进行索引的爬虫和一个提供搜索用的web界面。在查询界面可以使用前需要先设置Nutch爬虫对目标站点进行抓取。
部分配置文件的解释:
执行爬虫
执行后会在Nutch的根目录下生成一个crawl目录,里面存放的就是索引文件。
注意:执行命令前请先删除已存在的crawl文件夹。如果crawl文件已经存在,命令将无法正常执行。
windows定时任务的建立
Nutch的索引建立好后并不会自动更新,需要使用windows的计划任务建立计划任务来定期更新索引。
WEB搜索界面的部署
Nutch使用Java开发,其WEB界面需要跑在相应的web容器中,这里采用的是tomcat6。
部署到tomcat
- 复制nutch-0.9.war到tomcat6\webapps,运行tomcat6\bin\startup.bat启动tomcat。
-
tomcat将自动对war文件进行解压。修改文件tomcat6\webapps\nutch\WEB-INF\classes\nutch-site.xml,设置nutch的索引文件位置。
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>searcher.dir</name>
<value>D:\AppServ\nutch\crawl\</value>
</property>
</configuration>
- 重启tomcat并测试搜素功能,如果没有意外,服务将正常运行。
相关问题修正
- 搜索页面上的部分中文出现乱码。该问题主要由jsp:include引起。将被包含文件nutch\zh\include\header.html由UTF-8转换为GBK,修正该问题。
-
搜索中文出现乱码。修改tomcat配置文件tomcat6\conf\server.xml。增加URIEncoding/useBodyEncodingForURI两项。
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
URIEncoding="UTF-8"
useBodyEncodingForURI="true"/>
- 网页快照乱码问题修正。修改页面tomcat6\webapps\nutch\cached.jsp,将content = new String(bean.getContent(details))修改为content = new String(bean.getContent(details),"utf-8")。
-
apache整合。修改apache配置文件\conf\httpd.conf,增加如下配置
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
<IfModule mod_proxy.c>
ProxyPass /nutch http://localhost:8080/nutch
ProxyPassReverse /nutch http://localhost:8080/nutch
</IfModule>
-
url问题。在和apache整合后会出现url不正确的问题。主要表现为用户看到的url的前缀为ProxyPass中配置的url。目前还没有比较好的解决方案,只能手动修改所有问题jsp页面。使用命令findstr /s requestURI *.jsp查找出所有问题页面。在String base = requestURI.substring(0, requestURI.lastIndexOf(‘/’));后面增加base = base.replace("localhost:8080", "mysite.com");,将错误的url替换为正确的url地址。
- 删除页面tomcat6\webapps\nutch\cached.jsp,关闭网页快照功能。由于部分页面,当前用户可能无访问权限,关闭快照功能。
中文问题修改
Nutch默认支持中文搜索,只是Nutch对中文采用安字进行分词,例如搜索“中国”不使用双引号,将返回所有包含“中”和“国”的网页。为方便使用,系统自动为搜索内容添加双引号。
-
修改文件tomcat6\webapps\nutch\search.jsp。增加格式化搜索字符的函数,同时对queryString进行处理。
<%!
public static String format_query_str(String s) {
s = s.replace("”", "\"").replace("“", "\"");// 处理中文符号
if (s.indexOf("\"") > -1) {// 如果包含"则不继续进行处理
return s;
}
String[] ss = s.split(" ");
String ret_s = "";
for (String str : ss) {
if (str.trim().equals("")) {
continue;
}
if (str.indexOf("-") == 0) {
str = "-\"" + str.substring(1) + "\"";
} else {
str = "\"" + str + "\"";
}
ret_s += str + " ";
}
return ret_s.trim();
}
%>
queryString = format_query_str(queryString);
搜索帮助
- 使用方法和常见的搜索引擎类似,支持多关键字,多个关键字之间使用空格进行分割。
- 对中文采用安字进行分词,因此对中文搜索时最好加上双引号。例如搜索“中国”如果不使用双引号,将返回所有包含“中”和“国”的网页。
- 可以在一个词前面加减号丛而禁止它出现在搜索结果中, 例如, 搜索football -nfl 会找到讨论football, 但不出现"nfl"的网页。
- 搜索英文单词不区分大小写, 因此搜索NuTcH 等同于搜索 nUtCh。
相关网站