TermQuery只能精确匹配字符串(包括分词后的字符串,不分词的就需要全部匹配),不能用于数字的匹配。
1、创建IndexReader ,创建IndexSearcher
public IndexSearcher getSearcher(Directory directory) {
try {
if(reader==null) {
reader = IndexReader.open(directory);
} else {
IndexReader tr = IndexReader.openIfChanged(reader);
if(tr!=null) {
reader.close();
reader = tr;
}
}
return new IndexSearcher(reader);
} catch (CorruptIndexException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
2、创建Term和TermQuery,根据TermQuery获取TopDocs,根据TopDocs获取ScoreDoc,根据ScoreDoc获取相应文档
public void searchByTerm(String field,String name,int num) {
try {
IndexSearcher searcher = getSearcher();
Query query = new TermQuery(new Term(field,name));
TopDocs tds = searcher.search(query, num);
System.out.println("一共查询了:"+tds.totalHits);//tds.totalHits是总记录数,和传入的num没有任何关系,num表示本次查询多少条记录
for(ScoreDoc sd:tds.scoreDocs ) {
Document doc = searcher.doc(sd.doc) ;
System.out.println(doc.get("id")+"---->"+
doc.get("name")+"["+doc.get("email")+"]-->"+doc.get("id")+","+
doc.get("attach")+","+doc.get("date"));
}
searcher.close();
} catch (CorruptIndexException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}