我正在进行的项目是对一定数量的数据(长文本)建立索引,并将它们与每个时间间隔(大约 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 的建议吗(打开的文件太多)-SOLR https://issues.apache.org/jira/browse/SOLR-4或者这是索引数据量的问题?
我还读到它是批量索引或交互式索引之间的选择。
如何仅通过频繁更新来确定索引是否是交互式的?
那么我应该将这个项目归类为交互式索引吗?
更新:我正在添加 IndexWriter 的片段:
writer = new IndexWriter(dir, new StandardAnalyzer(Version.LUCENE_30), IndexWriter.MaxFieldLength.UNLIMITED);
似乎 maxMerge (?或字段长度...)已经设置为无限。