关于 nutch 查询(收藏)

(转贴,原著未明,望谅解.)
服务器端的启动命令(当前目录是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  ,其功能同上

 
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值