首页 > 解决方案 > Hibernate Search 和 Lucene 给出 FileNotFoundException

问题描述

我被 Apache Lucene 抛出的 FileNotFoundException 困住了。堆栈跟踪:

org.hibernate.search.exception.impl.LogErrorHandler handleException
ERROR: HSEARCH000058: Exception occurred java.io.FileNotFoundException: Error loading metadata for index file: M|segments_1|domain.Dog|-1
Primary Failure:
    Entity domain.Dog  Id 3  Work Type  org.hibernate.search.backend.AddLuceneWork
Subsequent failures:
    Entity domain.Dog  Id 1  Work Type  org.hibernate.search.backend.AddLuceneWork
java.io.FileNotFoundException: Error loading metadata for index file: M|segments_1|domain.Dog|-1
    at org.infinispan.lucene.impl.DirectoryImplementor.openInput(DirectoryImplementor.java:143)
    at org.infinispan.lucene.impl.DirectoryLucene.openInput(DirectoryLucene.java:102)
    at org.apache.lucene.store.Directory.openChecksumInput(Directory.java:109)
    at org.apache.lucene.index.SegmentInfos.readCommit(SegmentInfos.java:294)
    at org.apache.lucene.index.IndexFileDeleter.<init>(IndexFileDeleter.java:171)
    at org.apache.lucene.index.IndexWriter.<init>(IndexWriter.java:949)
    at org.hibernate.search.backend.impl.lucene.IndexWriterHolder.createNewIndexWriter(IndexWriterHolder.java:127)
    at org.hibernate.search.backend.impl.lucene.IndexWriterHolder.getIndexWriter(IndexWriterHolder.java:93)
    at org.hibernate.search.backend.impl.lucene.AbstractCommitPolicy.getIndexWriter(AbstractCommitPolicy.java:33)
    at org.hibernate.search.backend.impl.lucene.SharedIndexCommitPolicy.getIndexWriter(SharedIndexCommitPolicy.java:77)
    at org.hibernate.search.backend.impl.lucene.SharedIndexWorkspaceImpl.getIndexWriter(SharedIndexWorkspaceImpl.java:36)
    at org.hibernate.search.backend.impl.lucene.AbstractWorkspaceImpl.getIndexWriterDelegate(AbstractWorkspaceImpl.java:204)
    at org.hibernate.search.backend.impl.lucene.LuceneBackendQueueTask.applyUpdates(LuceneBackendQueueTask.java:82)
    at org.hibernate.search.backend.impl.lucene.LuceneBackendQueueTask.run(LuceneBackendQueueTask.java:47)
    at org.hibernate.search.backend.impl.lucene.SyncWorkProcessor$Consumer.applyChangesets(SyncWorkProcessor.java:167)
    at org.hibernate.search.backend.impl.lucene.SyncWorkProcessor$Consumer.run(SyncWorkProcessor.java:153)
    at java.lang.Thread.run(Thread.java:748)
mrt 12, 2021 11:18:37 AM org.hibernate.search.backend.impl.lucene.LuceneBackendQueueTask applyUpdates
ERROR: HSEARCH000072: Couldn't open the IndexWriter because of previous error: operation skipped, index ouf of sync!

我尝试了很多方法来解决这个问题,包括:

使用 Lucene NRT 选项似乎效果更好,但这仍然不是解决方案,因为在具有 2 台服务器的集群中运行它时,问题仍然存在,我需要它在一台服务器和集群中可靠地运行。

使用以下库:

我为此制作了一个复制器项目,可在以下位置获得: https ://filebin.net/r9fl8bxfrdlm4ai7

Apache Lucene 更改日志确实包含一些与 FileNotFoundException 相关的修复: https ://lucene.apache.org/core/7_0_1/changes/Changes.html#v7.0.1.bug_fixes

所以我怀疑这是 Apache Lucene 库中的一个错误......切换到另一个版本是不可能的,因为它是我使用的 Hibernate OGM 版本的一部分(最新版本是 5.4(2018-12-18))。所以问题是:这是库中的错误还是我在我的测试项目中肯定做错了什么?

标签: javahibernateluceneinfinispanjgroups

解决方案


推荐阅读