使用 Elasticsearch 的 Hibernate Search 中的初始索引崩溃
Initial indexation in Hibernate Search with Elasticsearch crashes
我正在尝试将 Hibernate Search 的 Elasticsearch 实现添加到现有项目中。
一切似乎都很好,我更新的和新的实体被索引到 Elastic,但是当我尝试将现有数据索引到 Elasticsearch 时(使用文档中提供的片段),我遇到了一个错误,整个应用程序崩溃。
索引代码
FullTextEntityManager fullTextEntityManager = Search.getFullTextEntityManager(JPA.em());
fullTextEntityManager.createIndexer().startAndWait();
错误跟踪
[error] o.h.s.e.i.LogErrorHandler - HSEARCH000058: Exception occurred org.hibernate.search.exception.SearchException: HSEARCH400007: Elasticsearch request failed.
Request:
========
Operation: DeleteByQuery
URI:models.project.project/models.project.Project/_query
Data:
{ "query" : { "constant_score" : { "filter" : { "match_all" : { } } } } }
Response:
=========
Status: 404
Error message: 404 Not Found
Cluster name: null
Cluster status: null
Primary Failure:
Entity models.project.Project Id null Work Type org.hibernate.search.backend.PurgeAllLuceneWork
Subsequent failures:
Entity models.project.Project Id null Work Type org.hibernate.search.backend.PurgeAllLuceneWork
org.hibernate.search.exception.SearchException: HSEARCH400007: Elasticsearch request failed.
Request:
========
Operation: DeleteByQuery
URI:models.project.project/models.project.Project/_query
Data:
{ "query" : { "constant_score" : { "filter" : { "match_all" : { } } } } }
Response:
=========
Status: 404
Error message: 404 Not Found
Cluster name: null
Cluster status: null
at org.hibernate.search.elasticsearch.client.impl.JestClient.executeRequest(JestClient.java:175)
at org.hibernate.search.elasticsearch.client.impl.JestClient.executeRequest(JestClient.java:161)
at org.hibernate.search.elasticsearch.client.impl.SingleRequest.doExecute(SingleRequest.java:42)
at org.hibernate.search.elasticsearch.client.impl.SingleRequest.execute(SingleRequest.java:37)
at org.hibernate.search.elasticsearch.client.impl.BackendRequestProcessor.doExecute(BackendRequestProcessor.java:106)
at org.hibernate.search.elasticsearch.client.impl.BackendRequestProcessor.executeSync(BackendRequestProcessor.java:76)
at org.hibernate.search.elasticsearch.impl.ElasticsearchIndexManager.performOperations(ElasticsearchIndexManager.java:406)
at org.hibernate.search.backend.impl.LocalBackendQueueProcessor.applyWork(LocalBackendQueueProcessor.java:38)
at org.hibernate.search.backend.impl.WorkQueuePerIndexSplitter.commitOperations(WorkQueuePerIndexSplitter.java:46)
at org.hibernate.search.backend.impl.batch.DefaultBatchBackend.sendWorkToShards(DefaultBatchBackend.java:79)
Uncaught error from thread [application-akka.actor.default-dispatcher-17] shutting down JVM since 'akka.jvm-exit-on-fatal-error' is enabled for ActorSystem[application]
java.lang.NoSuchMethodError: org.hibernate.search.engine.spi.DocumentBuilderIndexedEntity.getIdentifierName()Ljava/lang/String;
at org.hibernate.search.batchindexing.impl.BatchIndexingWorkspace.<init>(BatchIndexingWorkspace.java:88)
at org.hibernate.search.batchindexing.impl.BatchCoordinator.doBatchWork(BatchCoordinator.java:131)
[error] a.a.ActorSystemImpl - Uncaught error from thread [application-akka.actor.default-dispatcher-17] shutting down JVM since 'akka.jvm-exit-on-fatal-error' is enabled
at org.hibernate.search.batchindexing.impl.BatchCoordinator.runWithErrorHandler(BatchCoordinator.java:97)
at org.hibernate.search.batchindexing.impl.ErrorHandledRunnable.run(ErrorHandledRunnable.java:32)me()Ljava/lang/String;
at org.hibernate.search.batchindexing.impl.MassIndexerImpl.startAndWait(MassIndexerImpl.java:213)
at org.hibernate.search.batchindexing.impl.BatchIndexingWorkspace.<init>(BatchIndexingWorkspace.java:88)
at org.hibernate.search.batchindexing.impl.BatchCoordinator.doBatchWork(BatchCoordinator.java:131)
at models.project.Project.reindex(Project.java:253)
at org.hibernate.search.batchindexing.impl.BatchCoordinator.runWithErrorHandler(BatchCoordinator.java:97)
at controllers.ProjectController.reindex(ProjectController.java:80)
at org.hibernate.search.batchindexing.impl.ErrorHandledRunnable.run(ErrorHandledRunnable.java:32)
at router.Routes$$anonfun$routes$$anonfun$applyOrElse$$anonfun$apply.apply(Routes.scala:967)
at org.hibernate.search.batchindexing.impl.MassIndexerImpl.startAndWait(MassIndexerImpl.java:213)
at router.Routes$$anonfun$routes$$anonfun$applyOrElse$$anonfun$apply.apply(Routes.scala:967)
at models.project.Project.reindex(Project.java:253)
at play.core.routing.HandlerInvokerFactory$$anon.resultCall(HandlerInvoker.scala:157)
at controllers.ProjectController.reindex(ProjectController.java:80)
at router.Routes$$anonfun$routes$$anonfun$applyOrElse$$anonfun$apply.apply(Routes.scala:967)
at play.core.routing.HandlerInvokerFactory$$anon.resultCall(HandlerInvoker.scala:156)
at router.Routes$$anonfun$routes$$anonfun$applyOrElse$$anonfun$apply.apply(Routes.scala:967)
at play.core.routing.HandlerInvokerFactory$JavaActionInvokerFactory$$anon$$anon$$anon.invocation(HandlerInvoker.scala:13 at play.core.routing.HandlerInvokerFactory$$anon.resultCall(HandlerInvoker.scala:157)
6)
at play.core.j.JavaAction$$anon.call(JavaAction.scala:73)
at play.http.HttpRequestHandler.call(HttpRequestHandler.java:54)
at play.db.jpa.TransactionalAction.lambda$call(TransactionalAction.java:28)
at play.db.jpa.DefaultJPAApi.lambda$withTransaction(DefaultJPAApi.java:196)
at play.db.jpa.DefaultJPAApi.withTransaction(DefaultJPAApi.java:137)
at play.db.jpa.DefaultJPAApi.withTransaction(DefaultJPAApi.java:195)
at play.db.jpa.TransactionalAction.call(TransactionalAction.java:25)
at security.CheckAction.lambda$call[=11=](CheckAction.java:47)
at play.db.jpa.DefaultJPAApi.withTransaction(DefaultJPAApi.java:137)
at play.db.jpa.DefaultJPAApi.withTransaction(DefaultJPAApi.java:95)
at security.CheckAction.call(CheckAction.java:41)
at play.core.j.JavaAction$$anonfun.apply(JavaAction.scala:108)
at play.core.j.JavaAction$$anonfun.apply(JavaAction.scala:108)
at scala.concurrent.impl.Future$PromiseCompletingRunnable.liftedTree1(Future.scala:24)
at scala.concurrent.impl.Future$PromiseCompletingRunnable.run(Future.scala:24)
at play.core.j.HttpExecutionContext$$anon.run(HttpExecutionContext.scala:56)
at play.api.libs.iteratee.Execution$trampoline$.execute(Execution.scala:70)
at play.core.j.HttpExecutionContext.execute(HttpExecutionContext.scala:48)
at scala.concurrent.impl.Future$.apply(Future.scala:31)
at scala.concurrent.Future$.apply(Future.scala:492)
at play.core.j.JavaAction.apply(JavaAction.scala:108)
at play.api.mvc.Action$$anonfun$apply$$anonfun$apply$$anonfun$apply.apply(Action.scala:112)
at play.api.mvc.Action$$anonfun$apply$$anonfun$apply$$anonfun$apply.apply(Action.scala:112)
at play.utils.Threads$.withContextClassLoader(Threads.scala:21)
at play.api.mvc.Action$$anonfun$apply$$anonfun$apply.apply(Action.scala:111)
at play.api.mvc.Action$$anonfun$apply$$anonfun$apply.apply(Action.scala:110)
at scala.Option.map(Option.scala:146)
at play.api.mvc.Action$$anonfun$apply.apply(Action.scala:110)
at play.api.mvc.Action$$anonfun$apply.apply(Action.scala:103)
at scala.concurrent.Future$$anonfun$flatMap.apply(Future.scala:251)
at scala.concurrent.Future$$anonfun$flatMap.apply(Future.scala:249)
at scala.concurrent.impl.CallbackRunnable.run(Promise.scala:32)
at akka.dispatch.BatchingExecutor$AbstractBatch.processBatch(BatchingExecutor.scala:55)
at akka.dispatch.BatchingExecutor$BlockableBatch$$anonfun$run.apply$mcV$sp(BatchingExecutor.scala:91)
at akka.dispatch.BatchingExecutor$BlockableBatch$$anonfun$run.apply(BatchingExecutor.scala:91)
at akka.dispatch.BatchingExecutor$BlockableBatch$$anonfun$run.apply(BatchingExecutor.scala:91)
at scala.concurrent.BlockContext$.withBlockContext(BlockContext.scala:72)
at akka.dispatch.BatchingExecutor$BlockableBatch.run(BatchingExecutor.scala:90)
at akka.dispatch.TaskInvocation.run(AbstractDispatcher.scala:39)
at akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinTask.exec(AbstractDispatcher.scala:409)
at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)
at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339)
at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)
at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)
persistence.xml
<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"
version="2.1">
<persistence-unit name="defaultPersistenceUnit" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<non-jta-data-source>DefaultDS</non-jta-data-source>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQL9Dialect"/>
<property name="hibernate.hbm2ddl.auto" value=""/>
<property name="hibernate.connection.autocommit" value="true" />
<property name="hibernate.ejb.naming_strategy" value="org.hibernate.cfg.DefaultComponentSafeNamingStrategy"/>
<property name="hibernate.show_sql" value="false" />
<property name="hibernate.ejb.interceptor" value="history.HistoryInterceptor" />
<property name="hibernate.search.elasticsearch.host" value="http://localhost:9200" />
<property name="hibernate.search.default.indexmanager" value="elasticsearch" />
<property name="hibernate.search.index_management_strategy" value="CREATE" />
</properties>
</persistence-unit>
知道如何索引初始数据而不出现此错误吗?
谢谢!
我认为您缺少通过查询插件删除:https://www.elastic.co/guide/en/elasticsearch/plugins/2.4/plugins-delete-by-query.html
有关如何配置 Elasticsearch 集群的信息,请参阅我们文档中的这一段:http://docs.jboss.org/hibernate/stable/search/reference/en-US/html_single/#_elasticsearch_configuration。
请注意,该插件已集成到 Elasticsearch 5 中,但我们还不支持 Elasticsearch 5。
我正在尝试将 Hibernate Search 的 Elasticsearch 实现添加到现有项目中。
一切似乎都很好,我更新的和新的实体被索引到 Elastic,但是当我尝试将现有数据索引到 Elasticsearch 时(使用文档中提供的片段),我遇到了一个错误,整个应用程序崩溃。
索引代码
FullTextEntityManager fullTextEntityManager = Search.getFullTextEntityManager(JPA.em());
fullTextEntityManager.createIndexer().startAndWait();
错误跟踪
[error] o.h.s.e.i.LogErrorHandler - HSEARCH000058: Exception occurred org.hibernate.search.exception.SearchException: HSEARCH400007: Elasticsearch request failed.
Request:
========
Operation: DeleteByQuery
URI:models.project.project/models.project.Project/_query
Data:
{ "query" : { "constant_score" : { "filter" : { "match_all" : { } } } } }
Response:
=========
Status: 404
Error message: 404 Not Found
Cluster name: null
Cluster status: null
Primary Failure:
Entity models.project.Project Id null Work Type org.hibernate.search.backend.PurgeAllLuceneWork
Subsequent failures:
Entity models.project.Project Id null Work Type org.hibernate.search.backend.PurgeAllLuceneWork
org.hibernate.search.exception.SearchException: HSEARCH400007: Elasticsearch request failed.
Request:
========
Operation: DeleteByQuery
URI:models.project.project/models.project.Project/_query
Data:
{ "query" : { "constant_score" : { "filter" : { "match_all" : { } } } } }
Response:
=========
Status: 404
Error message: 404 Not Found
Cluster name: null
Cluster status: null
at org.hibernate.search.elasticsearch.client.impl.JestClient.executeRequest(JestClient.java:175)
at org.hibernate.search.elasticsearch.client.impl.JestClient.executeRequest(JestClient.java:161)
at org.hibernate.search.elasticsearch.client.impl.SingleRequest.doExecute(SingleRequest.java:42)
at org.hibernate.search.elasticsearch.client.impl.SingleRequest.execute(SingleRequest.java:37)
at org.hibernate.search.elasticsearch.client.impl.BackendRequestProcessor.doExecute(BackendRequestProcessor.java:106)
at org.hibernate.search.elasticsearch.client.impl.BackendRequestProcessor.executeSync(BackendRequestProcessor.java:76)
at org.hibernate.search.elasticsearch.impl.ElasticsearchIndexManager.performOperations(ElasticsearchIndexManager.java:406)
at org.hibernate.search.backend.impl.LocalBackendQueueProcessor.applyWork(LocalBackendQueueProcessor.java:38)
at org.hibernate.search.backend.impl.WorkQueuePerIndexSplitter.commitOperations(WorkQueuePerIndexSplitter.java:46)
at org.hibernate.search.backend.impl.batch.DefaultBatchBackend.sendWorkToShards(DefaultBatchBackend.java:79)
Uncaught error from thread [application-akka.actor.default-dispatcher-17] shutting down JVM since 'akka.jvm-exit-on-fatal-error' is enabled for ActorSystem[application]
java.lang.NoSuchMethodError: org.hibernate.search.engine.spi.DocumentBuilderIndexedEntity.getIdentifierName()Ljava/lang/String;
at org.hibernate.search.batchindexing.impl.BatchIndexingWorkspace.<init>(BatchIndexingWorkspace.java:88)
at org.hibernate.search.batchindexing.impl.BatchCoordinator.doBatchWork(BatchCoordinator.java:131)
[error] a.a.ActorSystemImpl - Uncaught error from thread [application-akka.actor.default-dispatcher-17] shutting down JVM since 'akka.jvm-exit-on-fatal-error' is enabled
at org.hibernate.search.batchindexing.impl.BatchCoordinator.runWithErrorHandler(BatchCoordinator.java:97)
at org.hibernate.search.batchindexing.impl.ErrorHandledRunnable.run(ErrorHandledRunnable.java:32)me()Ljava/lang/String;
at org.hibernate.search.batchindexing.impl.MassIndexerImpl.startAndWait(MassIndexerImpl.java:213)
at org.hibernate.search.batchindexing.impl.BatchIndexingWorkspace.<init>(BatchIndexingWorkspace.java:88)
at org.hibernate.search.batchindexing.impl.BatchCoordinator.doBatchWork(BatchCoordinator.java:131)
at models.project.Project.reindex(Project.java:253)
at org.hibernate.search.batchindexing.impl.BatchCoordinator.runWithErrorHandler(BatchCoordinator.java:97)
at controllers.ProjectController.reindex(ProjectController.java:80)
at org.hibernate.search.batchindexing.impl.ErrorHandledRunnable.run(ErrorHandledRunnable.java:32)
at router.Routes$$anonfun$routes$$anonfun$applyOrElse$$anonfun$apply.apply(Routes.scala:967)
at org.hibernate.search.batchindexing.impl.MassIndexerImpl.startAndWait(MassIndexerImpl.java:213)
at router.Routes$$anonfun$routes$$anonfun$applyOrElse$$anonfun$apply.apply(Routes.scala:967)
at models.project.Project.reindex(Project.java:253)
at play.core.routing.HandlerInvokerFactory$$anon.resultCall(HandlerInvoker.scala:157)
at controllers.ProjectController.reindex(ProjectController.java:80)
at router.Routes$$anonfun$routes$$anonfun$applyOrElse$$anonfun$apply.apply(Routes.scala:967)
at play.core.routing.HandlerInvokerFactory$$anon.resultCall(HandlerInvoker.scala:156)
at router.Routes$$anonfun$routes$$anonfun$applyOrElse$$anonfun$apply.apply(Routes.scala:967)
at play.core.routing.HandlerInvokerFactory$JavaActionInvokerFactory$$anon$$anon$$anon.invocation(HandlerInvoker.scala:13 at play.core.routing.HandlerInvokerFactory$$anon.resultCall(HandlerInvoker.scala:157)
6)
at play.core.j.JavaAction$$anon.call(JavaAction.scala:73)
at play.http.HttpRequestHandler.call(HttpRequestHandler.java:54)
at play.db.jpa.TransactionalAction.lambda$call(TransactionalAction.java:28)
at play.db.jpa.DefaultJPAApi.lambda$withTransaction(DefaultJPAApi.java:196)
at play.db.jpa.DefaultJPAApi.withTransaction(DefaultJPAApi.java:137)
at play.db.jpa.DefaultJPAApi.withTransaction(DefaultJPAApi.java:195)
at play.db.jpa.TransactionalAction.call(TransactionalAction.java:25)
at security.CheckAction.lambda$call[=11=](CheckAction.java:47)
at play.db.jpa.DefaultJPAApi.withTransaction(DefaultJPAApi.java:137)
at play.db.jpa.DefaultJPAApi.withTransaction(DefaultJPAApi.java:95)
at security.CheckAction.call(CheckAction.java:41)
at play.core.j.JavaAction$$anonfun.apply(JavaAction.scala:108)
at play.core.j.JavaAction$$anonfun.apply(JavaAction.scala:108)
at scala.concurrent.impl.Future$PromiseCompletingRunnable.liftedTree1(Future.scala:24)
at scala.concurrent.impl.Future$PromiseCompletingRunnable.run(Future.scala:24)
at play.core.j.HttpExecutionContext$$anon.run(HttpExecutionContext.scala:56)
at play.api.libs.iteratee.Execution$trampoline$.execute(Execution.scala:70)
at play.core.j.HttpExecutionContext.execute(HttpExecutionContext.scala:48)
at scala.concurrent.impl.Future$.apply(Future.scala:31)
at scala.concurrent.Future$.apply(Future.scala:492)
at play.core.j.JavaAction.apply(JavaAction.scala:108)
at play.api.mvc.Action$$anonfun$apply$$anonfun$apply$$anonfun$apply.apply(Action.scala:112)
at play.api.mvc.Action$$anonfun$apply$$anonfun$apply$$anonfun$apply.apply(Action.scala:112)
at play.utils.Threads$.withContextClassLoader(Threads.scala:21)
at play.api.mvc.Action$$anonfun$apply$$anonfun$apply.apply(Action.scala:111)
at play.api.mvc.Action$$anonfun$apply$$anonfun$apply.apply(Action.scala:110)
at scala.Option.map(Option.scala:146)
at play.api.mvc.Action$$anonfun$apply.apply(Action.scala:110)
at play.api.mvc.Action$$anonfun$apply.apply(Action.scala:103)
at scala.concurrent.Future$$anonfun$flatMap.apply(Future.scala:251)
at scala.concurrent.Future$$anonfun$flatMap.apply(Future.scala:249)
at scala.concurrent.impl.CallbackRunnable.run(Promise.scala:32)
at akka.dispatch.BatchingExecutor$AbstractBatch.processBatch(BatchingExecutor.scala:55)
at akka.dispatch.BatchingExecutor$BlockableBatch$$anonfun$run.apply$mcV$sp(BatchingExecutor.scala:91)
at akka.dispatch.BatchingExecutor$BlockableBatch$$anonfun$run.apply(BatchingExecutor.scala:91)
at akka.dispatch.BatchingExecutor$BlockableBatch$$anonfun$run.apply(BatchingExecutor.scala:91)
at scala.concurrent.BlockContext$.withBlockContext(BlockContext.scala:72)
at akka.dispatch.BatchingExecutor$BlockableBatch.run(BatchingExecutor.scala:90)
at akka.dispatch.TaskInvocation.run(AbstractDispatcher.scala:39)
at akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinTask.exec(AbstractDispatcher.scala:409)
at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)
at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339)
at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)
at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)
persistence.xml
<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"
version="2.1">
<persistence-unit name="defaultPersistenceUnit" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<non-jta-data-source>DefaultDS</non-jta-data-source>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQL9Dialect"/>
<property name="hibernate.hbm2ddl.auto" value=""/>
<property name="hibernate.connection.autocommit" value="true" />
<property name="hibernate.ejb.naming_strategy" value="org.hibernate.cfg.DefaultComponentSafeNamingStrategy"/>
<property name="hibernate.show_sql" value="false" />
<property name="hibernate.ejb.interceptor" value="history.HistoryInterceptor" />
<property name="hibernate.search.elasticsearch.host" value="http://localhost:9200" />
<property name="hibernate.search.default.indexmanager" value="elasticsearch" />
<property name="hibernate.search.index_management_strategy" value="CREATE" />
</properties>
</persistence-unit>
知道如何索引初始数据而不出现此错误吗?
谢谢!
我认为您缺少通过查询插件删除:https://www.elastic.co/guide/en/elasticsearch/plugins/2.4/plugins-delete-by-query.html
有关如何配置 Elasticsearch 集群的信息,请参阅我们文档中的这一段:http://docs.jboss.org/hibernate/stable/search/reference/en-US/html_single/#_elasticsearch_configuration。
请注意,该插件已集成到 Elasticsearch 5 中,但我们还不支持 Elasticsearch 5。