IndexWriter有关的几个参数设置及重建索引注意事项
来源:互联网 发布:g76车螺纹编程实例 编辑:程序博客网 时间:2024/05/18 00:44
Lucene 3.0版本:
http://www.cnblogs.com/huangfox/archive/2010/10/16/1853054.html
本文介绍和IndexWriter有关的3个参数:
1.MAXBufferedDocs
MaxBufferedDocs这个参数默认是disabled的,因为Lucene中还用另外一个参数(RAMBufferSizeMB)控制这个bufffer的索引文档个数。
其实MaxBufferedDocs和RAMBufferSizeMB这两个参数是可以一起使用的,一起使用时只要有一个触发条件满足就写入硬盘,生成一个新的索引segment文件。
2.RAMBufferSize
控制用于buffer索引文档的内存上限,如果buffer的索引文档个数到达该上限就写入硬盘。当然,一般来说也只越大索引速度越快。当我们对文档大小不太确定时,这个参数就相当有用,不至于outofmemory error.
3.MegerFactor
SetMergeFactor是控制segment合并频率的,其决定了一个索引块中包括多少个文档,当硬盘上的索引块达到多少时,将它们合并成一个较大的索引块。当MergeFactor值较大时,生成索引的速度较快。MergeFactor的默认值是10,建议在建立索引前将其设置的大一些。
注意:
1.不要随意设置MaxbufferedDocs。
MaxBufferedDocs和RAMBufferSize共同控制内存中文档的容量。
如果对MaxBufferedDocs进行设置要比较小心了,因为它本身是disabled,如果设置不合理将导致大规模的重建索引非常慢。
例如:
import java.io.File;import java.io.IOException;import org.apache.lucene.analysis.Analyzer;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.Store;import org.apache.lucene.document.StringField;import org.apache.lucene.index.IndexWriter;import org.apache.lucene.index.IndexWriterConfig;import org.apache.lucene.store.FSDirectory;import org.apache.lucene.util.Version;public class ceshi0303 {public static void main(String[] args) {IndexWriter writer = null;FSDirectory dir = null;try {dir = FSDirectory.open(new File("d:\\20140303index"));Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_46); IndexWriterConfig iwConfig = new IndexWriterConfig( Version.LUCENE_46, analyzer); iwConfig.setMaxBufferedDocs(100);writer = new IndexWriter(dir, iwConfig);Field f1 = new StringField("f1", "", Store.YES);Field f2 = new StringField("f2", "", Store.YES);long s = System.currentTimeMillis();for (int i = 0; i < 500000; i++) {Document doc = new Document();f1.setStringValue("f1 hello doc" + i);doc.add(f1);f2.setStringValue("f2 world doc" + i);doc.add(f2);writer.addDocument(doc);}System.out.println(System.currentTimeMillis() - s + "ms");System.out.println("over");}catch (IOException e) {e.printStackTrace();}finally {try {writer.close();}catch (IOException e) {e.printStackTrace();}}}}
上述代码中对MaxBufferedDocs进行设置:
iwConfig.setMaxBufferedDocs(100);
那么现在对内存中文档的容量有两个控制量:
1.文档数量达到100就写回磁盘;
2.文档总容量达到16m就写回磁盘;
因为上面一个文档的大小很小,100个文档的容量肯定不会达到16m,所以第一个控制量起到主要的作用。
在没有设置MaxBufferedDocs之前就只有RAMBufferSize(16m)控制内存中文档的数量,
较之这两种情况,明显是没有设置MaxbufferedDocs更好的利用了内存,因此建立索引更快速。
实验证明:
设置MaxBufferedDocs后跑了75041ms,而不设置只需3892.8ms。2.不要太迷信MegerFactor比较大会加快重建索引的速度。
通过实验,在上述代码中奖MegerFactor设置成10比100要快2s。
而在4.6版本中没有找到这个参数,就使用默认的吧。- IndexWriter有关的几个参数设置及重建索引注意事项
- IndexWriter基础使用及注意事项
- 索引重建的分析及操作
- mysq l索引使用的几个注意事项
- 索引的使用及注意事项
- Oracle表与索引的分析及索引重建
- Oracle表与索引的分析及索引重建
- Oracle表与索引的分析及索引重建
- Oracle表与索引的分析及索引重建
- Oracle表与索引的分析及索引重建
- Oracle表与索引的分析及索引重建
- Oracle表与索引的分析及索引重建
- Oracle表与索引的分析及索引重建
- [Oracle] ORACLE表与索引的分析及索引重建
- Oracle表与索引的分析及索引重建
- Oracle表与索引的分析及索引重建
- Oracle表与索引的分析及索引重建
- Oracle表与索引的分析及索引重建
- 胭脂冷、碎玉楚碟烟花散
- C++Vector用法
- CocosBuilder 完全攻略
- Storm Trident 示例
- opencv+python+pyqt+eric4开发环境搭建
- IndexWriter有关的几个参数设置及重建索引注意事项
- 发布release版本的apk软件
- shell中条件判断if中的-z到-d的意思
- 清除共享时保存的密码
- source命令
- Ground truth 在计算机方面的意思
- override 类中的hashCode() equals()
- iOS 使用ASI实现图片的缓存机制
- 关于java中Double类型的运算精度问题