私が取り組んでいるプロジェクトでは、一定数のデータ (長いテキストを含む) のインデックスを作成し、それらを間隔 (約 15 ~ 30 分) ごとに単語のリストと比較しています。
しばらくして、たとえば 35 ラウンド後、36 ラウンドで新しいデータ セットのインデックス作成を開始しているときに、次のエラーが発生しました。
[ERROR] (2011-06-01 10:08:59,169) org.demo.service.LuceneService.countDocsInIndex(?:?) : Exception on countDocsInIndex:
java.io.FileNotFoundException: /usr/share/demo/index/tag/data/_z.tvd (Too many open files)
at java.io.RandomAccessFile.open(Native Method)
at java.io.RandomAccessFile.<init>(RandomAccessFile.java:233)
at org.apache.lucene.store.SimpleFSDirectory$SimpleFSIndexInput$Descriptor.<init>(SimpleFSDirectory.java:69)
at org.apache.lucene.store.SimpleFSDirectory$SimpleFSIndexInput.<init>(SimpleFSDirectory.java:90)
at org.apache.lucene.store.NIOFSDirectory$NIOFSIndexInput.<init>(NIOFSDirectory.java:91)
at org.apache.lucene.store.NIOFSDirectory.openInput(NIOFSDirectory.java:78)
at org.apache.lucene.index.TermVectorsReader.<init>(TermVectorsReader.java:81)
at org.apache.lucene.index.SegmentReader$CoreReaders.openDocStores(SegmentReader.java:299)
at org.apache.lucene.index.SegmentReader.get(SegmentReader.java:580)
at org.apache.lucene.index.SegmentReader.get(SegmentReader.java:556)
at org.apache.lucene.index.DirectoryReader.<init>(DirectoryReader.java:113)
at org.apache.lucene.index.ReadOnlyDirectoryReader.<init>(ReadOnlyDirectoryReader.java:29)
at org.apache.lucene.index.DirectoryReader$1.doBody(DirectoryReader.java:81)
at org.apache.lucene.index.SegmentInfos$FindSegmentsFile.run(SegmentInfos.java:736)
at org.apache.lucene.index.DirectoryReader.open(DirectoryReader.java:75)
at org.apache.lucene.index.IndexReader.open(IndexReader.java:428)
at org.apache.lucene.index.IndexReader.open(IndexReader.java:274)
at org.demo.service.LuceneService.countDocsInIndex(Unknown Source)
at org.demo.processing.worker.DataFilterWorker.indexTweets(Unknown Source)
at org.demo.processing.worker.DataFilterWorker.processTweets(Unknown Source)
at org.demo.processing.worker.DataFilterWorker.run(Unknown Source)
at java.lang.Thread.run(Thread.java:636)
私はすでに開いているファイルの最大数を設定しようとしました:
ulimit -n <number>
しかし、しばらくして、間隔に約 1050 行の長いテキストがあると、同じエラーが発生します。しかし、それは一度だけ起こりました。
Lucene IndexWriter の mergeFactor を(Too many open files) - SOLRから変更するというアドバイスに従うべきですか、それともインデックスが作成されるデータの量に関する問題ですか?
また、バッチ インデックス作成と対話型インデックス作成のどちらかを選択できることも読みました。頻繁に更新するだけで、インデックス作成がインタラクティブかどうかをどのように判断できますか? では、このプロジェクトをインタラクティブなインデックス作成の下に分類する必要がありますか?
更新: IndexWriter のスニペットを追加しています:
writer = new IndexWriter(dir, new StandardAnalyzer(Version.LUCENE_30), IndexWriter.MaxFieldLength.UNLIMITED);
maxMerge (? またはフィールド長...) は既に無制限に設定されているようです。