一、查询理论
创建查询:构建一个包含了文档域和语汇单元的文档查询对象。(例:fileName:lucene)
查询过程:根据查询对象的条件,在索引中找出相应的term,然后根据term找到对应的文档id列表。
二、代码分析
实现代码
/** * Lucene入门 * 查询索引 */ public class QueryIndex { /** * 查询索引 * 第一步:创建一个Directory对象,指定索引库的位置 * 第二步:创建一个IndexReader(索引读取)对象,需要指定Directory对象 * 第三步:创建一个IndexSearcher(索引搜索)对象,需要指定IndexReader对象 * 第四步:创建一个TermQuery(域查询)对象,指定查询的域和查询关键词 * 第五步:执行查询 * 第六步:返回查询结果,遍历查询结果并输出 * 第七步:关闭IndexReader对象(关流) */ @Test public void queryIndex() throws Exception { /*第一步:创建一个Directory对象,指定索引库的位置*/ Directory directory = FSDirectory.open(new File("E:\zhanghaoBF\luceneSolr\indexLibrary").toPath());//磁盘(硬盘)上的路径 /*第二步:创建一个IndexReader(索引读取)对象*/ IndexReader indexReader = DirectoryReader.open(directory);//打开索引库(此对象为流对象) /*第三步:创建一个IndexSearcher(索引搜索)对象*/ IndexSearcher indexSearcher = new IndexSearcher(indexReader); /*第四步:创建一个TermQuery(域查询)对象,指定查询的域和查询关键词*/ Query query = new TermQuery(new Term("fileContent", "lucene"));//PS:TermQuery为精准查询 /*第五步:执行查询*/ TopDocs topDocs = indexSearcher.search(query, 2);//根据query搜索,返回评分最高的2条 /*第六步:返回查询结果,遍历查询结果并输出*/ ScoreDoc[] scoreDocs = topDocs.scoreDocs;//PS:注意这里返回的是文档id的数组 for (ScoreDoc scoreDoc : scoreDocs) { int docId = scoreDoc.doc;//文档ID Document document = indexSearcher.doc(docId);//对应的文档 String fileName = document.get("fileName");//文件名称 System.out.println(fileName); String fileSize = document.get("fileSize");//文件大小 System.out.println(fileSize); String filePath = document.get("filePath");//文件路径 System.out.println(filePath); System.out.println("----------华丽的分割线----------"); } /*第七步:关闭IndexReader对象(关流)*/ indexReader.close(); } }