import java.io.IOException;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.document.Field.Index;
import org.apache.lucene.document.Field.Store;
import org.apache.lucene.index.CorruptIndexException;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.Term;
import org.apache.lucene.search.Hits;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.TermQuery;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.store.LockObtainFailedException;
import org.apache.lucene.store.RAMDirectory;
/**
* @author Vincnet
* @version 2.3
*
*/
public class Test {
public static void main(String[] args) throws CorruptIndexException,
LockObtainFailedException, IOException {
long data1 = System.currentTimeMillis();
/**
* 分别创建两个对象
* */
FSDirectory fsDir = FSDirectory.getDirectory("E://Lucene//Index2//");
RAMDirectory ramDir = new RAMDirectory();
IndexWriter ramwriter = new IndexWriter(ramDir, new StandardAnalyzer(),true);
IndexWriter fsdwriter = new IndexWriter(fsDir, new StandardAnalyzer(),true);
Document document = new Document();
/**
* Field(String name, String value, Field.Store store, Field.Index index)
* Create a field by specifying its name, value and how it will be saved in the index.
*
*/
document.add(new Field("name","Vincnet",Store.YES,Index.TOKENIZED));
document.add(new Field("age","18",Store.YES,Index.UN_TOKENIZED));
document.add(new Field("note","this is a test data",Store.YES,Index.TOKENIZED));
ramwriter.addDocument(document);
fsdwriter.addDocument(document);
ramwriter.flush();
//将fsd里面的索引和ram的索引合并成同一个所以 关键一句
fsdwriter.addIndexes(new Directory[]{ramDir});
ramwriter.close();
fsdwriter.flush();
fsdwriter.close();
IndexSearcher searcher = new IndexSearcher(ramDir);
Hits hits = searcher.search(new TermQuery(new Term("name","vincnet")));
for(int i = 0 ; i < hits.length() ; i++){
System.out.println(hits.length()+" "+hits.doc(i).get("name"));
}
searcher.close();
System.out.println("运行时间 : "+(System.currentTimeMillis() - data1)+" ms");
}
}
分享到:
相关推荐
### Lucene索引合并知识点...通过上述步骤,我们可以有效地将RAMDirectory中的索引合并到FSDirectory中,从而实现索引的高效管理和查询。此外,通过分批合并的方式,还可以更好地利用内存资源,提高系统的整体性能。
接下来,我们创建一个Directory对象,它可以是内存中的RAMDirectory或磁盘上的FSDirectory,用于存储索引。然后,通过IndexWriter实例化,配置好Analyzer和Directory,就可以开始添加Document到索引中了。 Document...
创建Directory,作为索引的存储位置,如内存目录RAMDirectory或磁盘上的FSDirectory。 2. 创建索引:创建IndexWriter对象,设置Analyzer和Directory,然后逐个添加Document。每个Document代表一个要索引的实体,...
Directory则用来保存索引,可以选择不同的实现,如内存中的RAMDirectory或磁盘上的FSDirectory。IndexWriter是构建和管理索引的关键对象。 接下来,你需要创建一个索引器类,该类使用Spring的ApplicationContext...
2. 创建Directory对象,这将是存储索引的地方,可以是内存中的RAMDirectory或磁盘上的FSDirectory。 3. 创建Analyzer对象,根据需求选择合适的分词器。 4. 创建IndexWriter对象,设置Analyzer并打开Directory进行写...
3. **创建Directory**: Directory代表了存储索引的物理位置,如内存(RAMDirectory)或磁盘(FSDirectory)。 4. **创建IndexWriter**: IndexWriter是负责写入和更新索引的对象。设置好Analyzer和Directory后,就...
1. 初始化Directory对象,这通常是内存中的RAMDirectory或硬盘上的FSDirectory。 2. 创建Analyzer实例,根据需求选择不同的Analyzer。 3. 创建IndexWriter,设置相应的参数,如写入模式、最大文档数等。 4. 创建...
Lucene提供了灵活的索引存储机制,支持多种存储方式,如RAMDirectory(内存)、FSDirectory(磁盘文件系统)等。不同的存储方式对性能有着不同的影响,选择合适的存储方式对于提高搜索效率至关重要。 **4. 查询解析...
1. **初始化目录**:Lucene需要一个目录来存储索引,可以是内存中的RAMDirectory或磁盘上的FSDirectory。 2. **创建索引写入器(IndexWriter)**:使用IndexWriter实例,配置合适的Analyzer(如StandardAnalyzer)...
Lucene支持多种存储机制,如RAMDirectory(内存中)和FSDirectory(文件系统中)。 4. **查询处理**:当用户输入查询时,Lucene会解析查询字符串,生成查询对象,并与索引进行匹配。 5. **搜索结果**:返回最相关...
- 创建 Directory 对象:作为索引的存储位置,可以选择 RAMDirectory(内存)或 FSDirectory(磁盘)。 - 创建 Document 对象:添加字段,设置字段类型。 - 添加文档:使用 `IndexWriter` 将文档写入索引。 - ...
- **Directory**: 存储索引的接口,实现包括内存中的RAMDirectory和硬盘上的FSDirectory。 - **Analyzer**: 处理文本分析的类,可以通过自定义Analyzer实现特定的语言处理规则。 - **Document**: 用于表示一个文档的...
Lucene支持多种类型的Directory,包括文件系统上的FSDirectory和内存中的RAMDirectory。FSDirectory通常用于持久化存储索引,而RAMDirectory则用于临时的索引存储,通常在应用重启后索引会丢失。 除此之外,文档还...
- **Directory**:提供索引存储接口,可以选择内存(RAMDirectory)或磁盘(FSDirectory)作为索引的存储位置。 - **Segment**:索引的基本单位,一个Segment代表了不可变的一组文档。 6. **优化与性能**: - **...
4. 循环遍历文件,创建Document对象,将文件内容(如文件名、内容等)转化为Field并添加到Document中。 5. 使用IndexWriter的addDocument方法将Document写入索引。 6. 最后,关闭IndexWriter以保存索引并释放资源。 ...
另外就是可以用多线程来分别对不同的内容进行索引并保存到RAMDirectory里,然后再把所有的内存索引合并到FSDirectory里,甚至可以让多台服务器分别处理内容的各个部分,然后把索引结果放到一个队列里,再有一台机器...
☆4) 域由若干词(关键字)(Term)组成:文件的属性的内容中某个字符串映射成一个词。 4. Lucene包结构 1) analysis模块:负责词法分析及语言处理而形成Term(词)。提供了一些内置的分析器:最常用的是...
7. **内存与磁盘管理**: Lucene.Net利用RAMDirectory和FSDirectory类分别处理内存和磁盘上的索引存储。这允许在内存中快速访问,同时将大部分数据保存在硬盘上,以节省内存。 8. **多线程支持**: Lucene.Net支持多...
- **store**:管理索引的存储,如FSDirectory和RAMDirectory分别对应文件系统和内存中的存储。 - **document**:定义了文档和域的数据结构。 - **search**:实现索引的搜索,IndexSearcher和Query类是主要的搜索...
Directory 用于存储索引,常见的有 RAMDirectory(内存中)和 FSDirectory(文件系统中)。 2. **创建索引**: - 创建 Document 对象,添加字段,如 `doc.add(new Field("content", content, Field.Store.YES, ...