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();
}
}
}
分享到:
相关推荐
5. **合并索引**:所有线程完成索引后,使用IndexWriter的`addIndexes()`方法将所有子索引合并到一个主索引中。 这个过程需要注意线程同步问题,确保在合并索引之前,所有线程已经完成了它们的工作,避免并发冲突。...
使用`IndexWriter`的`addIndexes`方法将RAMDirectory中的索引合并到FSDirectory中。 5. **关闭IndexWriter**: ```java fsWriter.close(); ``` 最后关闭FSDirectory的`IndexWriter`。 #### 四、详细步骤说明 ...
接下来,通过`FSDirectory.getDirectory(from, false)`获取源索引文件的目录,并将其作为参数传递给`indexWriter.addIndexes`方法,将源索引添加到合并列表中。调用`indexWriter.optimize()`执行实际的合并操作,...
创建这些索引的SQL语句如【部分内容】所示,可以通过ALTER TABLE语句添加到表中。例如,创建主键索引使用`ALTER TABLE ... ADD PRIMARY KEY`,创建唯一索引使用`ALTER TABLE ... ADD UNIQUE INDEX`,创建普通索引...
- 使用覆盖索引(Covering Index),即索引中包含所有需要查询的列。 - 对于频繁使用的查询,考虑使用视图或存储过程来封装。 #### 数据配置优化 数据配置的优化主要包括缓存大小的设置以及合理的内存分配。通过...
33. 优化包括索引、查询优化、内存调优、存储引擎选择。 34. 备份方案应考虑业务需求、系统规模、恢复时间目标。 35. DBA 执行 SQL 注意数据完整性和性能影响。 36. 中文乱码与字符集设置有关,确保客户端、服务器、...
- **索引(Indexes)**:提高查询速度的数据结构,分为B树索引、位图索引等。 - **视图(Views)**:虚拟表,由SQL查询结果组成,提供数据的另一种访问方式。 - **游标( Cursors)**:在PL/SQL中用于处理单条...
字符串字段中含有\"\\t \\n\",如果用来在c或者c++程序中输出到文件,格式无法保证。 比如:replace(f2,\'\\t\',\'\') <3>.清除换行和回车 比如: replace(f2,chr(13)||chr(10),\'\') 23、如何在字符串里加回车...
### Oracle从入门到精通 #### 一、SQL基础 ##### 1.1 基本概念 - **Oracle**:一款广泛使用的商业关系型数据库管理系统。 - **SQL**(Structured Query Language):用于管理和处理Oracle数据库中的数据的标准...
例:将test表中的Count列宽度加长为10个字符 sql>alter atble test modify (County char(10)); b、将一张表删除语句的格式如下: DORP TABLE 表名; 例:表删除将同时删除表的数据和表的定义 sql>drop table ...