在服务器启动期间,索引工作正常(创建索引,搜索工作正常)。但是当我们试图更新一些索引时,我们得到了锁异常,索引不工作,搜索不给给予正确的结果。
下面是错误日志。同样的事情也发生在Linux服务器上。
2023-09-07T11:39:50,437 [ERROR] [Hibernate Search sync consumer thread for index com.demoBO] [org.hibernate.search.exception.impl.LogErrorHandler] - HSEARCH000058: Exception occurred org.apache.lucene.store.LockObtainFailedException: Lock held by this virtual machine: D:\test\com.demoBO\write.lock
Primary Failure:
Entity com.demoBO Id 532 Work Type org.hibernate.search.backend.UpdateLuceneWork
org.apache.lucene.store.LockObtainFailedException: Lock held by this virtual machine: D:\test\com.demoBO\write.lock
at org.apache.lucene.store.NativeFSLockFactory.obtainFSLock(NativeFSLockFactory.java:127) ~[lucene-core-5.5.5.jar:5.5.5 b3441673c21c83762035dc21d3827ad16aa17b68 - sarowe - 2017-10-20 08:57:09]
at org.apache.lucene.store.FSLockFactory.obtainLock(FSLockFactory.java:41) ~[lucene-core-5.5.5.jar:5.5.5 b3441673c21c83762035dc21d3827ad16aa17b68 - sarowe - 2017-10-20 08:57:09]
at org.apache.lucene.store.BaseDirectory.obtainLock(BaseDirectory.java:45) ~[lucene-core-5.5.5.jar:5.5.5 b3441673c21c83762035dc21d3827ad16aa17b68 - sarowe - 2017-10-20 08:57:09]
at org.apache.lucene.index.IndexWriter.<init>(IndexWriter.java:776) ~[lucene-core-5.5.5.jar:5.5.5 b3441673c21c83762035dc21d3827ad16aa17b68 - sarowe - 2017-10-20 08:57:09]
at org.hibernate.search.backend.impl.lucene.IndexWriterHolder.createNewIndexWriter(IndexWriterHolder.java:127) [hibernate-search-engine-5.11.6.Final.jar:5.11.6.Final]
at org.hibernate.search.backend.impl.lucene.IndexWriterHolder.getIndexWriter(IndexWriterHolder.java:93) [hibernate-search-engine-5.11.6.Final.jar:5.11.6.Final]
at org.hibernate.search.backend.impl.lucene.AbstractWorkspaceImpl.getIndexWriter(AbstractWorkspaceImpl.java:118) [hibernate-search-engine-5.11.6.Final.jar:5.11.6.Final]
at org.hibernate.search.backend.impl.lucene.AbstractWorkspaceImpl.getIndexWriterDelegate(AbstractWorkspaceImpl.java:204) [hibernate-search-engine-5.11.6.Final.jar:5.11.6.Final]
at org.hibernate.search.backend.impl.lucene.LuceneBackendQueueTask.applyUpdates(LuceneBackendQueueTask.java:82) [hibernate-search-engine-5.11.6.Final.jar:5.11.6.Final]
at org.hibernate.search.backend.impl.lucene.LuceneBackendQueueTask.run(LuceneBackendQueueTask.java:47) [hibernate-search-engine-5.11.6.Final.jar:5.11.6.Final]
at org.hibernate.search.backend.impl.lucene.SyncWorkProcessor$Consumer.applyChangesets(SyncWorkProcessor.java:167) [hibernate-search-engine-5.11.6.Final.jar:5.11.6.Final]
at org.hibernate.search.backend.impl.lucene.SyncWorkProcessor$Consumer.run(SyncWorkProcessor.java:153) [hibernate-search-engine-5.11.6.Final.jar:5.11.6.Final]
at java.lang.Thread.run(Thread.java:748) [?:1.8.0_302]
2023-09-07T11:39:50,453 [ERROR] [Hibernate Search sync consumer thread for index com.demoBO] [org.hibernate.search.backend.impl.lucene.LuceneBackendQueueTask] - HSEARCH000072: Couldn't open the IndexWriter because of previous error: operation skipped, index ouf of sync!
我的demoBO看起来像:-
@Entity
@Indexed
@Table(name = "DEMO_TB")
public class demoBO extends AbstractBO implements Serializable,
Comparable<demoBO> {
@Column(name = "active")
@Field(analyze=Analyze.NO, store = Store.YES)
private Boolean status;
@Column(name = "deletion")
@Field(analyze=Analyze.NO, store = Store.YES)
private Boolean deletion;
@Column(name = "keyValue", length = 256)
@Field(analyze=Analyze.YES, store = Store.YES)
private String keyValue;
@Transient
private int status = 0;
在服务器启动期间,代码用于创建索引(在此之后生成一个write.lock文件):-
entityManager = (EntityManager) applicationContext.getBean(entityManager);
FullTextEntityManager fullTextEntityManager = Search.getFullTextEntityManager(entityManager);
try {
fullTextEntityManager.createIndexer(DemoBO.class).startAndWait();
} catch (InterruptedException e) {
e.printStackTrace();
}
1条答案
按热度按时间cgvd09ve1#
这个错误意味着两个独立的Lucene / Hibernate Search示例试图同时打开同一个索引,这是不可能的。
您很可能同时为同一个模型启动多个AlternityManagerFactory。你不应该。