このシーリズの文章は、IndexWriterを構造する流れを紹介します。主に3つの部分があります:
● インデックスでぃれくろのDirectoryをセットする
● IndexWriterのIndexWriterConfigをセットする
● IndexWriterコンストラクタを呼ぶ
前の文章では、もう不可変更コンフィグを紹介した上、続いて変更可能コンフィグを紹介する。
IndexWriterのIndexWriterConfig
変更可能コンフィグ
変更可能配置には:MergePolicy、MaxBufferedDocs、RAMBufferSizeMB、MergedSegmentWarmer、UseCompoundFile、CommitOnClose、CheckPendingFlushUpdateがある。
MergePolicy
MergePolicyはsegmentの合併策略であり。インデックス目録から合併条件にふさわしいsegment集合(segment set)を探す処理方法である。2つの策略がある:LogMergePolicyとTieredMergePolicy。MergePolicyはIndexWriterConfig.setMergePolicy(MergePolicy mergePolicy)を通じて設定することができる。Lucene7.5.0にはデフォルト策略はTieredMergePolicyである。MergePolicyは変更されたと、次の合併の時に効くことになる。
MaxBufferedDocs、RAMBufferSizeMB
RAMBufferSizeMBはインデックスを説明するインフォメーションがCacheに保存する最大の使用空間である。ただし、MaxBufferedDocsは一つのDWPTの最大のファイル数である。
ファイルのCUD操作を行った後、FlushPolicyによって自動的なflushを判断する。Lucene7.5.0では、FlushByRamOrCountsPolicyという策略はMaxBufferedDocsとRAMBufferSizeMBによって判断する。
MaxBufferedDocsはIndexWriterConfig.setMaxBufferedDocs(int maxBufferedDocs)を通じて設定することができる。デフォルトバリューは-1であり、このMaxBufferedDocsを使わない意味をしている。
RAMBufferSizeMBはIndexWriterConfig.setRAMBufferSizeMB(double ramBufferSizeMB)を通じて設定することができる。デフォルトバリューは16Mである。
MergedSegmentWarmer
MergedSegmentWarmerはsegment合併の時、事前に新たなsegmentの情報を獲得しする。segment合併とファイルのCRUDは並列処理なので、パフォーマンスを向上することができる。
MergedSegmentWarmerはIndexWriterConfig.setMergedSegmentWarmer(IndexReaderWarmer mergeSegmentWarmer)を通じて設定することができる。デフォルトバリューはnullである。
UseCompoundFile
UseCompoundFileはブーリアンである。バリューはtrueだと、flushやcommitの操作で生成したファイルはCompoundFileで、すなわち.cfs、.cfeである。
UseCompoundFileはIndexWriterConfig.setUseCompoundFile(boolean useCompoundFile)を通じて設定することができる。デフォルトバリューはtrueである。
CommitOnClose
CommitOnCloseはブーリアンである。バリューはtrueだと、まずは全部の変更を応用し、即ちcommit操作を実行する。falseだと、ラストcommitした内容を保存しない。
CommitOnCloseはIndexWriterConfig.setCommitOnClose(boolean commitOnClose)を通じて設定することができる。デフォルトバリューはtrueである。
CheckPendingFlushUpdate
CheckPendingFlushUpdateはブーリアンである。バリューはtrueだと、スレッドはファイルのアッドやアップデートを実行した後、DWPTをflushすることになる。