(转贴,原著未明,望谅解.)
服务器端的启动命令(当前目录是Nutch的安装目录): bin/nutch server 9999 /indexpath
这样会在本机的 9999 端口开启一个监听器并默认的是启动 10个 handle 来接受查询请求。
indexpath是 服务器上索引文件的 物理路径 ,可以是绝对路径,也可以是相对路径,但需要注意能够在当前目录下找得到。
在客户端就是查询端 ,需要两步,一:添加或者修改search-servers.txt ,其内容为:
xxxxxxxxxxxx port
其中xxxxxxxxxxxx 是启动查询server的服务器 ip地址(最好别使用域名或主机名称,除非必要) ;
二:修改 nutch-site.xml
<property>
<name>searcher.dir</name>
<value>c:/</value>
</property>
如果没有searcher.dir的配置项,则增加,value 的值是 search-servers.txt 的目录路径。
然后就可以启动了,如果索引没有问题的话 ,查询的时候tomcat 会有如下提示信息:
060908 225520 23 creating new bean
060908 225520 23 searching servers in C:/search-servers.txt
060908 225520 23 Client adding server 58.215.74.239:9999
060908 225520 24 Client connection to 58.215.74.239:9999: starting
060908 225520 23 STATS: 1 servers, 17 segments.
这样就表示 查询服务器和客户端都正常工作了,就可以查询到服务器上的数据了。
一下输出信息是我把 searchserver 和tomcat 启动绑到一起的提示信息:
060908 225455 11 parsing file:/C:/program/WEB-INF/classe
s/nutch-default.xml
060908 225455 11 parsing file:/C:/program/WEB-INF/classe
s/nutch-site.xml
060908 225455 11 opening segment indexes in C:/serverindex/segments
060908 225458 12 Server listener on port 9999: starting
060908 225458 13 Server handler on 9999: starting
060908 225458 14 Server handler on 9999: starting
060908 225458 15 Server handler on 9999: starting
060908 225458 16 Server handler on 9999: starting
060908 225458 17 Server handler on 9999: starting
060908 225458 18 Server handler on 9999: starting
060908 225458 19 Server handler on 9999: starting
060908 225458 20 Server handler on 9999: starting
060908 225458 21 Server handler on 9999: starting
060908 225458 22 Server handler on 9999: starting
060908 225502 10 Create Host deployer for direct deployment ( non-jmx )
060908 225502 10 Starting Coyote HTTP/1.1 on http-80
060908 225502 10 JK2: ajp13 listening on /0.0.0.0:8009
060908 225502 10 Jk running ID=0 time=0/80 config=C:/server/tomcat/conf/jk2.pro
perties
这样在集群的时候通过 web.xml 来配置是否需要启动 searchserver
public Hits search(Query query, int numHits,
int maxHitsPerSite, String dedupField,
String sortField, boolean reverse)
这是一个搜索请求的入口,关键在于构造Query ,Nutch 默认的搜索查询分析器是采用一元分词的,为了提高查询精度,所以采用分词。分词需要在原始文档索引之前进行一次,经过分词处理后在索引入库。在查询的时候同样也需要分词,这点可以在yahoo的搜索技术文章里找到更详细的说明。
numHits 翻页使用。
maxHitsPerSite :来自同一host的页面在搜索结果中的数量
dedupField :去除重复的字段
sortField:排序字段
reverse:是否采用倒序排列结果集
首先说Query ,其他的结果参数比较简单,不作过多说明。
/** Parse a query from a string. */
public static Query parse(String queryString) throws IOException {
return fixup(NutchAnalysis.parseQuery(queryString));
}
这是Nutch的查询分析器代码 , 将查询条件进行分词处理,此处可以将NutchAnalysis.parseQuery(String input) 的一元分词程序更换为自己的分词算法。返回的 Query 经过封装 ,主要开放 8个组合查询方法,下面,我将对这8个方法进行注解:
1、public void addRequiredTerm(String term) ,该方法的功能是增加一个查询条件 , 查询的字段是DEFAULT , 也就是在 BasicQueryFilter 中定义的 FIELDS 数组的 字段 ,效果相当于 AND
2、public void addRequiredTerm(String term, String field) 指定查询字段是 field , 其功能同上,但field必须被加载,否则字段验证失败。我在第一次接触Nutch 的时候 曾试图修改代码来加载 Field , 发现其复杂程度超过想象,后来改用插件的方式,竟然很容易就解决了,所以,增加自定义的查询字段,插件是最好的方法。
3、public void addProhibitedTerm(String term) 增加一个查询条件,字段是Default , 效果相当于 NOT
4、public void addProhibitedTerm(String term, String field) 指定查询字段是field ,其功能同上。
5、public void addRequiredPhrase(String[] terms) , 增加一个查询条件,相当于AND,数组terms之间的关系是OR
6、public void addRequiredPhrase(String[] terms, String field) , 指定查询字段是 field,其功能同上
7、public void addProhibitedPhrase(String[] terms) , 效果相当于NOT,terms之间的关系是 or,既限制搜索结果中不包含 terms中的任何一个。
8、public void addProhibitedPhrase(String[] terms, String field) , 指定查询字段 field ,其功能同上