在对很多文档进行索引之后,该怎样去快速定位到Documen的位置?
例如我要查找包含“上海”的文档,我该怎样快速定位包含“上海"的document的位置?
public class ReaderByIndexerTest {
public static void search(String indexDir,String q)throws Exception{
//得到读取索引文件的路径
Directory dir=FSDirectory.open(Paths.get(indexDir));
//通过dir得到的路径下的所有的文件
IndexReader reader=DirectoryReader.open(dir);
//建立索引查询器
IndexSearcher is=new IndexSearcher(reader);
//实例化分析器
Analyzer analyzer=new StandardAnalyzer();
//建立查询解析器
/**
* 第一个参数是要查询的字段;
* 第二个参数是分析器Analyzer
* */
QueryParser parser=new QueryParser("title", analyzer);
//根据传进来的p查找
Query query=parser.parse(q);
//计算索引开始时间
long start=System.currentTimeMillis();
//开始查询
/**
* 第一个参数是通过传过来的参数来查找得到的query;
* 第二个参数是要出查询的行数
* */
TopDocs hits=is.search(query, 500);
// TopDocs hits1= is.searchAfter(hits.scoreDocs[999], query, 1);
//计算索引结束时间
long end=System.currentTimeMillis();
System.out.println("匹配 "+q+" ,总共花费"+(end-start)+"毫秒"+"查询到"+hits.totalHits+"个记录");
//遍历hits.scoreDocs,得到scoreDoc
/**
* ScoreDoc:得分文档,即得到文档
* scoreDocs:代表的是topDocs这个文档数组
* @throws Exception
* */
for(ScoreDoc scoreDoc:hits.scoreDocs){
Document doc=is.doc(scoreDoc.doc);
System.out.println("id="+doc.get("id")+"---->title="+doc.get("title"));
}
//关闭reader
reader.close();
}
//测试
public static void main(String[] args) {
long start=System.currentTimeMillis();
String indexDir="d:\\luceneDemo";
String q="70533636-1448-4ed5-922f-ef33557d32ee";
try {
search(indexDir,q);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
long end=System.currentTimeMillis();
System.out.println("总流程花费"+(end-start)+"毫秒");
}
匹配 70533636-1448-4ed5-922f-ef33557d32ee ,总共花费1051毫秒查询到3926个记录
id=10000000---->title=70533636-1448-4ed5-922f-ef33557d32ee
id=6050845---->title=973c3b75-4b35-4ed5-922f-af6b3e3d79c3
id=9464722---->title=af29187f-1448-4c97-a58f-08f7a70756c0
id=9088371---->title=1fdd7d52-1448-482d-9320-e66b263a55a5
id=9223590---->title=32a056b5-1448-4a94-91ea-3ef62654d6a1
id=9223659---->title=0f77f7a2-1448-4d70-a446-c6ca17df1adc
id=9260433---->title=ee1dc06c-1448-4ae8-acae-67b8434147c4
.............