-
本质:先对文件内容进行分词,创建索引,再进行查询
- 一、入门程序
- 1、创建索引
- 环境: 需要下载Lucene http://lucene.apache.org/ 最低要去jdk1.8
- 工程搭建:
- 创建一个java工程
- 添加jar:
- lucene-core-7.4.0.jar
- lucene-analyzers-common-7.4.0.jar
- commons-io.jar aper的工具包
- 步骤:
- 1、创建一个Directory对象,指定索引库保存的位置。
- 2、基于Directory对象创建一个IndexWeiter对象
- 3、读取磁盘上的文件,对应每个文件创建一个文档对象。
- 4、向文档对象中添加域
- 5、把文档对象写入索引库
- 6、关闭indexWriter对象
-
/** * 创建索引 * @throws Exception */ @Test public void createIndex() throws Exception { // 1、创建一个Directory对象,指定索引库保存的位置。 //把索引库保存在内存中(保存在内存中,程序关闭就丢失了) // Directory directory = new RAMDirectory(); //把索引库保存在磁盘 Directory directory = FSDirectory.open(new File("E:\\logs\\index").toPath()); // 2、基于Directory对象创建一个IndexWeiter对象 //标准分析器 // IndexWriter indexWriter = new IndexWriter(directory, new IndexWriterConfig()); IndexWriterConfig config = new IndexWriterConfig(new IKAnalyzer()); IndexWriter indexWriter = new IndexWriter(directory, config); // 3、读取磁盘上的文件,对应每个文件创建一个文档对象。 File dir = new File("G:\\java视频学习\\讲义+笔记+资料\\01.java课件源码\\37.Lucene\\lucene\\02.参考资料\\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 fieldPath = new StoredField("path",filePath); Field fieldContent = new TextField("content", fileContent, Field.Store.YES); // Field fieldSize = new TextField("size", fileSize + "", Field.Store.YES); Field fieldSizeValue = new LongPoint("size", fileSize); Field fieldSizeStore = new StoredField("size", fileSize); //创建文档对象 Document document = new Document(); //4、向文档对象中添加域 document.add(fieldName); document.add(fieldPath); document.add(fieldContent); // document.add(fieldSize); document.add(fieldSizeValue); document.add(fieldSizeStore); //5、把文档对象写入索引库 indexWriter.addDocument(document); //6、关闭indexWriter对象 indexWriter.close(); } }
- 2、使用luke查看索引库中的内容 使用Java9才可以使用
- 3、查询索引库
- 步骤:
- 1、创建一个Director对象,指定索引库的位置
- 2、创建一个IndexReader对象
- 3、创建一个IndexSearcher对象,构造方法中的参数indexReader对象
- 4、创建一个Query对象,TermQuery
- 5、执行查询,得到一个Top Docs对象
- 6、取查询结果的总记录数
- 7、取文档列表
- 8、打印文档中的内容
- 9、关闭IndexReader对象
-
/** * 查询索引 * @throws Exception */ @Test public void searchIndex() throws Exception { //1、创建一个Director对象,指定索引库的位置 Directory directory = FSDirectory.open(new File("E:\\logs\\index").toPath()); //2、创建一个IndexReader对象 IndexReader indexReader = Directory
- 步骤:
使用lucene进行的全文检索技术 基于Java的工具包
最新推荐文章于 2022-08-19 20:24:31 发布