错误有二:
其一:程序错误,ramwriter的关闭时机有问题,应在合并之前关闭。
FSDirectory fsDir = FSDirectory.getDirectory("/data/index", true);
RAMDirectory ramDir = new RAMDirectory();
IndexWriter fsWriter = new IndexWriter(fsDir, new StandardAnalyzer(), true);
IndexWriter ramWriter = new IndexWriter(ramDir, new StandardAnalyzer(), true);
while (there are documents to index)
{
... create Document ...
ramWriter.addDocument(doc);
if (condition for flushing memory to disk has been met)
{
fsWriter.addIndexes(new Directory[] { ramDir });
ramWriter.close();//这一行位置错误,应移到上一行的上面
ramWriter = new IndexWriter(ramDir, new StandardAnalyzer(), true);
}
}
其二:这样并不能提高性能,反而会更慢。
测试数据如下:
文件系统现有文件大小 内存索引大小 lucene版本 用时
767M <1k 2.2 272203 134250
770K 297 391
2.4-1.4G 2.4.1 164781 66938 67578
2.4版本的确比2.2的快一倍。
而如果直接写入文件系统,1.5G的现有索引文件,写入一条document只需要31ms。
分享到:
相关推荐
//关闭索引写出器,此时才把索引写到目标存储地 2) Directory: 索引存放地。 a) 文件系统:FSDirectory: FSDirectory.open(File file); b) 内存RAMDirectory: new RAMDirectory(); 3) Analyzer: 分词器。 a...
RAMDirectoryTest用于统计lucene字符在文档中出现次数
性能优化也很重要,因为如果要索引的文件比较大的话,建立索引的性能就会很大的下降,你可以调整IndexWriter的几个参数来优化索引性能,还有可以用IndexWriter.Optimize()方法(这个方法主要是优化查询速度,反而使...
可以通过系统属性或配置文件的方式来指定路径,多个路径之间用逗号分隔开 类路径下的词典文件,需要在相对路径前加入前缀classpath: 指定方式有三种: 指定方式一,编程指定(高优先级): WordConfTools.set(...
第二个是 RAMDirectory,它表示一个存储在内存当中的索引的位置。 public void add(Query query, BooleanClause.Occur occur) BooleanClause用于表示布尔查询子句关系的类,包括: BooleanClause.Occur.MUST,...
1 、 new IndexWriter(new RAMDirectory(), new StandardAnalyzer(), true); 在内存中建立索引,速度最快但是耗资源,而且重启就没了。 2 、 new IndexWriter(FSDirectory.getDirectory(path, true), new ...
修正细粒度分词错误的问题 1.3.1 —— 2006-06-23 修正在某些情况下分词遗漏的问题 1.3 —— 2006-06-22 实现了词尾消歧算法中第一层的过滤 增加日期时间的匹配 1.2.2 —— 2006-06-13 完善了中...
使用lucene对字符串数组在内存建立索引 并检索