Lucene-与索引库的交互 - 球球之家 - 博客频道 - CSDN.NET
内存索引库:数据是临时的、访问速度比文件索引库要快、索引库中的数据不能存放太多、内存索引库和文件索引库能结合在一起
两个或者两个以上的索引库的合并:
如果是内存索引库,直接调用构造函数进行合并就可以了 内存索引库中。也可以调用addIndexesNoOptimize进行合并
如果是文件索引库,调用addIndexesNoOptimize进行合并,该方法可以接受多个索引库
- /**
- * 文件索引库和内存索引库的结合
- */
- @Test
- public void testRamAndFile() throws Exception{
- /**
- * 1、当应用程序启动的时候,把文件索引库的内容复制到内存库中
- * 2、让内存索引库和应用程序交互
- * 3、把内存索引库的内容同步到文件索引库
- */
- Directory fileDirectory = FSDirectory.open(new File("./indexDir"));
- Directory ramDirectory = new RAMDirectory(fileDirectory);
- IndexWriter ramIndexWriter = new IndexWriter(ramDirectory,LuceneUtils.analyzer,MaxFieldLength.LIMITED);
- IndexWriter fileIndexWriter = new IndexWriter(fileDirectory,LuceneUtils.analyzer,true,MaxFieldLength.LIMITED);
- /**
- * 在内存索引库中根据关键词查询
- */
- this.showData(ramDirectory);
- System.out.println("上面的是从内存索引库中查询出来的");
- /**
- * 把一条信息插入到内存索引库
- */
- Article article = new Article();
- article.setId(1L);
- article.setTitle("lucene可以做搜索引擎");
- article.setContent("baidu,google都是很好的搜索引擎");
- ramIndexWriter.addDocument(DocumentUtils.article2Document(article));
- ramIndexWriter.close();
- /*
- * 把内存索引库中的内容同步到文件索引库中
- */
- fileIndexWriter.addIndexesNoOptimize(ramDirectory);
- fileIndexWriter.close();
- this.showData(fileDirectory);
- System.out.println("上面的是从文件索引库中查询出来的");