使用直接方式访问搜索结果中每个文档的内容是比hits中采用缓存方式(遍历返回的所有hits对象)性能更好的办法,使用自定义的HitCollector来实现
假设要对返回的所有书将其与URL匹配,对每个文档都要访问,
public classBookLinkCollector extendsHitCollector{
private IndexSearcher searcher;
private HashMap documents=newHashMap();
public BookLinkCollector(IndexSearcher searcher){
this.searcher=searcher;
}
public void collect(int id,floatscore){//HitCollector必须实现的方法
try{
Document doc=searcher.doc(id);
documents.put(doc.get("url"),doc.get("title"));
}catch (IOException e){
}
}
public Map getLinks(){
returnCollections.unmodifiableMap(documents);
}
}
下面使用以上的类
TermQuery query=new TermQuery(new Term("contents","junit"));
IndexSearcher searcher=getSearcher();
BookLinkCollector collector=new BookLinkCollector(searcher);
searcher.search(query,collector);
searcher.close();
Map linkMap=collector.getLinks();
assertEquals("java DEVELOPMENT",linkMap.get(http://www.xxx.com));