四、Nutch 每条索引记录的字段说明
url: 作为唯一标标识值,由BasicIndexingFilter类产生。
segment: 由Indexer类产生。Nutch抓回来的页面内容放在segments目录,lucene只会索引,不会store原文内容,因此在查询时要以 segment与url作为外键,由FetchedSegments类根据hitsDetail从segments目录获得content。
boost:优先级,由Indexer类调用插件计算产生。
title:显示标题,在BasicIndexingFilter插件中被索引和存储。
content: 主要的被搜索项,在BasicIndexingFilter插件中被索引。
五、Nutch搜索过程实例
Nutch提供了一个Fascade的NutchBean类供我们使用,一段典型的代码如下
NutchBean bean = new NutchBean();
Query query = Query.parse(args[0]);
Hits hits = bean.search(query, NUM_HITS,"title",true);
for (int i = 0; i < hits.getLength(); i++) {
Hit hit = hits.getHit(i);
HitDetails details = bean.getDetails(hit);
String title = details.getValue("title");
String url = details.getValue("url");
String summary =bean.getSummary(details, query);
}
这里NutchBean为我们做了几样事情:
一是按Title field来排序
二是支持分布式查询,如果有配置servers,就会使用hadoop的IPC系统,调用所有server上的nutchBeans,最后规约出总的结果。
三是每个站点只显示分数最高的一页,如果用户还想看同站的其他结果,就需要访问MoreHitsExculde[]。
四是生成Summary,读取segments目录,按segments和url 获得content, 并按一定算法抽取出包含关键字的文档片断。