2012-02-01 8 views
0

インデックスを構成するファイルの数をできるだけ少なくする必要がある特定のアプリケーションがあります。私はLucene.NET 2.9.2を使用した場合、以前私が使用して、3(又は4)ファイルにインデックス全体を維持することができた:Lucene.NETにアップグレードした後Luceneインデックスファイルの数を最小化

writer.SetUseCompoundFile(true); 
writer.Optimize(1, true); 

同じコードインデックスを生成なる2.9.4 10ファイル(fdt、fdx、fnm、frq、nrm、prx、tii、tis + segments.genおよびsegments_c)のうちの1つです。どうすればそれをもう一度取り戻すことができますか?

原因はおそらくLuceneが深く、Lucene.NET固有のものではないでしょう。まだ何かがバージョン間で変わってしまって、私はこれを支配したいと思っています。

+0

インデックスディレクトリにCFSファイルがありますか?私はちょうどテストし、複合ファイルは2.9.4gのバージョンで正常に動作するようです... –

+0

いいえ、私はしていません。私はこのCFSファイルに対していくつかのWeb参照を見ましたが、私はそれを持っていません。私のバージョンが低すぎるのだろうか?これは現在推奨されている安定版です。私はちょうどチェックして、正確なバージョンは2.4.9.1です。 – wpfwannabe

+0

Nugetの2.9.4.1バージョンを使用してテストしたところ、正常に動作します。 SetUseCompoundFile(true)の呼び出しの後にcommit()を呼び出すか、Writerを正しく閉じてもよろしいですか? –

答えて

2

私はこれをテストするために使った正確なコードスニペットを投稿し、あなたのコードと比較して、何が間違っているかを知るのに役立ちます。

FSDirectory dir = FSDirectory.GetDirectory("C:\\temp\\CFSTEST"); 
IndexWriter writer = new IndexWriter(dir, new CJKAnalyzer()); 
writer.SetUseCompoundFile(true); 

Document document = new Document(); 

document.Add(new Field(
    "text", 
    "プーケット", 
    Field.Store.YES, 
    Field.Index.ANALYZED)); 
writer.AddDocument(document); 

document.GetField("text").SetValue("another doc"); 
writer.AddDocument(document); 

writer.Optimize(1, true); 
writer.Close(); 
3

OK、私はようやく答えを見つけました。長い索引作成プロセス中にインデックスディレクトリを調べると、CFSが来ていることがわかりましたが、プロセスが完了するとCFSファイルの兆候はありません。私はいくつかの新しいキーワード(感謝@ jf - beaulac)とI've found thisを与えていくつかの研究を行った。彼らは、CFSのデフォルトのしきい値がインデックスサイズ全体の10%であると言います。セグメントがそれを超えると、writer.SetUseCompoundFile(true)の使用に関係なく、CFSは作成されません。

ので、いくつかのLucene.NETを掘り後、私は、次の必要なステップが出ている:

 indexWriter.SetUseCompoundFile(true); 
     var mergePolicy = indexWriter.GetMergePolicy(); 
     var logPolicy = mergePolicy as LogMergePolicy; 
     if (logPolicy != null) 
     { 
      logPolicy.SetNoCFSRatio(1); 
     } 

100%に「無CFS-比」を設定しないCFSし、最終的に物事内のすべてのセグメントを保持します私は彼らが欲しいと思うように働く。

だから、@ jf-beaulacは私の仕事をやってくれてありがとう。私はいくつかのドキュメントを追加してもあなたのサンプルが失敗すると思います。それでも、私はあなたの助けを認識しているので、私はあなたの答えを受け入れるでしょう。

+0

うわーいいキャッチ、これは知っておくと良いです! –

関連する問題