linux - Lucene 上打开的文件太多错误

标签 linux indexing lucene ioexception file-not-found

我正在从事的项目是对一定数量的数据(带有长文本)编制索引,并在每个时间间隔(大约 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>

但是过了一段时间,当interval有1050行左右的长文本时,出现同样的错误。但它只发生过一次。

我是否应该遵循从 (Too many open files) - SOLR 修改 Lucene IndexWriter 的 mergeFactor 的建议?或者这是索引数据量的问题?

我还读到它是批量索引或交互式索引之间的选择。 仅通过频繁更新,如何确定索引是否具有交互性? 那么我应该将这个项目归类到交互式索引下吗?

更新:我正在添加我的 IndexWriter 的片段:

        writer = new IndexWriter(dir, new StandardAnalyzer(Version.LUCENE_30), IndexWriter.MaxFieldLength.UNLIMITED);

似乎 maxMerge(?或字段长度...)已设置为无限制。

最佳答案

我已经使用了 ulimit 但错误仍然显示。 然后我检查了用于 lucene 函数的自定义核心适配器。 原来有太多的 IndexWriter.open 目录是 LEFT OPEN。

需要注意的是,经过处理后,会一直调用关闭打开的目录。

关于linux - Lucene 上打开的文件太多错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6210348/

相关文章:

php - 无法在 amazon ec2 linux 服务器中使用 imagecopyresized

python - 在 `numpy.where` 上调用 `masked_array`

css - rails : Displaying Users on Index Page

lucene - 使用 Where() 查询 Raven 仅过滤前 128 个文档?

java - 更新 RAMDirectory 的最佳方法

linux - 避免在用户空间和内核空间之间复制数据,反之亦然

linux - 尝试附加到已安装目录中的文件的权限被拒绝

linux - 在 C# 守护进程和单一服务中使用 System.Diagnostics.EventLog

MySQL 索引键

elasticsearch - Elasticsearch中模糊和匹配之间的区别