lucene-编写HitCollector直接访问搜索结果

使用直接方式访问搜索结果中每个文档的内容是比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));

你可能感兴趣的:(JUnit,Lucene)