`
ttitfly
  • 浏览: 622229 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

通过addIndexes将内存中的索引加入到磁盘索引

阅读更多
package com.lucene;

import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.queryParser.QueryParser;
import org.apache.lucene.search.Hits;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.store.RAMDirectory;

public class RamAndDiskIndex {

	private static String path = "d:/index";
	public static void main(String[] args) {
		index();
		search();
	}
	
	public static void index(){
		try{
			Directory ramDir = new RAMDirectory();
			Directory diskDir = FSDirectory.getDirectory(path);
			
			IndexWriter ramWriter = new IndexWriter(ramDir,new StandardAnalyzer(),true);
			IndexWriter diskWriter = new IndexWriter(diskDir,new StandardAnalyzer(),true);
			
			
			//新增一条数据到内存索引中,然后再由内存索引加入到磁盘索引中去
			
			Document doc = new Document();
			doc.add(new Field("id","123456",Field.Store.YES,Field.Index.TOKENIZED));
			doc.add(new Field("value","hello world",Field.Store.YES,Field.Index.TOKENIZED));
			//添加到内存
			ramWriter.addDocument(doc);
			//关闭ram的IndexWriter实例,把数据给ramDir, 必须要先关闭,然后才能调用addIndexes方法把ramDir参数传入;
			ramWriter.close();
			//通过disk的IndexWriter实例的addIndexes 
			diskWriter.addIndexes(new Directory[]{ramDir});
			
			diskWriter.close();
		}catch(Exception e){
			e.printStackTrace();
		}
	}
	
	
	public static Query queryParser(){
		
		QueryParser queryParser = new QueryParser("value", new StandardAnalyzer());
		try {
			Query query =  queryParser.parse("world");
			return query;
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}
	
	public static void search(){
		try {
			IndexSearcher search = new IndexSearcher(path);
			
			Query query = queryParser();
			
			Hits hits = search.search(query);
			if(hits==null)
				return;
			for (int i = 0; i < hits.length(); i++) {
				Document doc = hits.doc(i);
				System.out.println("id = "+hits.id(i));
				System.out.println("");
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}

分享到:
评论

相关推荐

    lucene索引优化多线程多目录创建索引

    5. **合并索引**:所有线程完成索引后,使用IndexWriter的`addIndexes()`方法将所有子索引合并到一个主索引中。 这个过程需要注意线程同步问题,确保在合并索引之前,所有线程已经完成了它们的工作,避免并发冲突。...

    索引合并策略

    接下来,通过`FSDirectory.getDirectory(from, false)`获取源索引文件的目录,并将其作为参数传递给`indexWriter.addIndexes`方法,将源索引添加到合并列表中。调用`indexWriter.optimize()`执行实际的合并操作,...

    mysql添加索引.pdf

    创建这些索引的SQL语句如【部分内容】所示,可以通过ALTER TABLE语句添加到表中。例如,创建主键索引使用`ALTER TABLE ... ADD PRIMARY KEY`,创建唯一索引使用`ALTER TABLE ... ADD UNIQUE INDEX`,创建普通索引...

    mysql优化sql语句的优化(索引,常用小技巧.)

    - 使用覆盖索引(Covering Index),即索引中包含所有需要查询的列。 - 对于频繁使用的查询,考虑使用视图或存储过程来封装。 #### 数据配置优化 数据配置的优化主要包括缓存大小的设置以及合理的内存分配。通过...

    mysql面试题.docx

    33. 优化包括索引、查询优化、内存调优、存储引擎选择。 34. 备份方案应考虑业务需求、系统规模、恢复时间目标。 35. DBA 执行 SQL 注意数据完整性和性能影响。 36. 中文乱码与字符集设置有关,确保客户端、服务器、...

    oracle常用命令及函数.rar

    - **索引(Indexes)**:提高查询速度的数据结构,分为B树索引、位图索引等。 - **视图(Views)**:虚拟表,由SQL查询结果组成,提供数据的另一种访问方式。 - **游标( Cursors)**:在PL/SQL中用于处理单条...

    Oracle事例

    字符串字段中含有\"\\t \\n\",如果用来在c或者c++程序中输出到文件,格式无法保证。 比如:replace(f2,\'\\t\',\'\') &lt;3&gt;.清除换行和回车 比如: replace(f2,chr(13)||chr(10),\'\') 23、如何在字符串里加回车...

    oracle从入门到精通

    ### Oracle从入门到精通 #### 一、SQL基础 ##### 1.1 基本概念 - **Oracle**:一款广泛使用的商业关系型数据库管理系统。 - **SQL**(Structured Query Language):用于管理和处理Oracle数据库中的数据的标准...

    最全的oracle常用命令大全.txt

    例:将test表中的Count列宽度加长为10个字符 sql&gt;alter atble test modify (County char(10)); b、将一张表删除语句的格式如下: DORP TABLE 表名; 例:表删除将同时删除表的数据和表的定义 sql&gt;drop table ...

Global site tag (gtag.js) - Google Analytics