1. 流程主要就是构建索引库然后搜索索引库
lucene-analyzers-common-7.4.0.jar lucene-core-7.4.0.jar lucene-queryparser-7.4.0.jar
2. 构建索引库
1、创建一个Director对象,指定索引库保存的位置
2、基于Directory对象创建一个IndexWriter对象
3、读取磁盘上的文件,对应每个文件创建一个文档对象
4、向文档对象中添加域
5、把文档对象写入索引库
6、关闭indexwriter对象
//1、创建一个Director对象,指定索引库保存的位置。 //把索引库保存在磁盘 Directory directory = FSDirectory.open(new File("E:\lucene\index").toPath()); //2、基于Directory对象创建一个IndexWriter对象 IndexWriter indexWriter = new IndexWriter(directory, new IndexWriterConfig()); //3、读取磁盘上的文件,对应每个文件创建一个文档对象。 File dir = new File("E:\lucene\searchsource"); File[] files = dir.listFiles(); for (File f : files) { //取文件名 String fileName = f.getName(); //文件的路径 String filePath = f.getPath(); //文件的内容 String fileContent = FileUtils.readFileToString(f, "utf-8"); //文件的大小 long fileSize = FileUtils.sizeOf(f); //创建Field //参数1:域的名称,参数2:域的内容,参数3:是否存储 Field fieldName = new TextField("name", fileName, Field.Store.YES); Field fieldPath = new TextField("path", filePath, Field.Store.YES); Field fieldContent = new TextField("content", fileContent, Field.Store.YES); Field fieldSize = new TextField("size", fileSize + "", Field.Store.YES); //创建文档对象 Document document = new Document(); //4、向文档对象中添加域 document.add(fieldName); document.add(fieldPath); document.add(fieldContent); document.add(fieldSize); //5、把文档对象写入索引库 indexWriter.addDocument(document); } //6、关闭indexwriter对象 indexWriter.close();
3. 搜索索引库
1、创建一个Director对象,指定索引库的位置
2、创建一个IndexReader对象
3、创建一个IndexSearcher对象,构造方法中的参数indexReader对象
4、创建一个Query对象,TermQuery
5、执行查询,得到一个TopDocs对象
6、取查询结果的总记录数
7、取文档列表
8、打印文档中的内容
9、关闭IndexReader对象
//1、创建一个Director对象,指定索引库的位置 Directory directory = FSDirectory.open(new File("E:\lucene\index").toPath()); //2、创建一个IndexReader对象 IndexReader indexReader = DirectoryReader.open(directory); //3、创建一个IndexSearcher对象,构造方法中的参数indexReader对象。 IndexSearcher indexSearcher = new IndexSearcher(indexReader); //4、创建一个Query对象,TermQuery Query query = new TermQuery(new Term("content", "lucene")); //5、执行查询,得到一个TopDocs对象 //参数1:查询对象 参数2:查询结果返回的最大记录数 TopDocs topDocs = indexSearcher.search(query, 10); //6、取查询结果的总记录数 System.out.println("查询总记录数:" + topDocs.totalHits); //7、取文档列表 ScoreDoc[] scoreDocs = topDocs.scoreDocs; //8、打印文档中的内容 for (ScoreDoc doc : scoreDocs) { //取文档id int docId = doc.doc; //根据id取文档对象 Document document = indexSearcher.doc(docId); System.out.println(document.get("name")); System.out.println(document.get("path")); System.out.println(document.get("size")); System.out.println(document.get("content")); System.out.println("-----------------寂寞的分割线"); } //9、关闭IndexReader对象 indexReader.close();