我正在處理的項目將索引一定數量的數據(使用長文本),並將它們與每個間隔(約15到30分鐘)的單詞列表進行比較。太多打開的文件Lucene的錯誤
過了一段時間,說第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行長文本,則會發生相同的錯誤。但它只發生過一次。
我應該按照從(Too many open files) - SOLR修改Lucene IndexWriter的mergeFactor的建議嗎?或者這是一個索引數據量的問題?
我也讀過這是批量索引或交互式索引之間的選擇。 如何通過頻繁的更新來確定索引是否是交互式的? 我應該在交互式索引下分類這個項目嗎?
更新:我加入我的IndexWriter的片段:
writer = new IndexWriter(dir, new StandardAnalyzer(Version.LUCENE_30), IndexWriter.MaxFieldLength.UNLIMITED);
好像maxMerge(或字段長度...?)已被設置爲無限制。
嗨,我是Lucene新手。你的意思是調用'writer.close()'或'writer.getDirectory()。close()'? – 2011-09-20 12:01:11
作家和作家的目錄都應該在使用後關閉。 有一些打開的目錄訪問我的,這就是爲什麼我有太多的打開文件錯誤。 =] – eunique0216 2011-09-21 03:44:32
有趣的是,我已經完成了這裏的所有建議,並且我仍然以相同的錯誤結束。 – alvas 2013-01-15 08:51:38