您有令人困扰的问题?我们可能会有答案。
索引
索引目录中没有创建文件
Hibernate Search 不会在现有目录中创建新索引。
基本 Lucene 索引文件是在框架启动时创建的,但现有目录不会被修改。删除目录:框架将在启动时创建它并构建基本索引结构。自 3.1 版本起,它会自动检测现有目录中的索引。
在集群中,我的节点似乎无法看到彼此的索引更改
问题可能会有很大差异,但最有可能的是配置问题。请仔细查看参考文档中的配置章节,尤其是关于 架构 的章节。
在多台服务器上运行应用程序时,您需要同时设置适当的后端(将更改委托给主节点)和 DirectoryProvider(存储索引)。
我收到一个 IndexFormatTooOldException
,我该怎么办?
我们尽量减少您需要重新索引数据的次数。这通常发生在您升级到新的 Hibernate Search 主要版本时。主要原因有两个:
-
Lucene 强制使用新的索引格式
-
我们决定默认情况下以更有效的方式索引给定属性
最好阅读我们的 迁移指南,其中详细说明了可能影响您的 API 和索引结构更改。
最简单的方法是重新生成索引结构(例如使用 Mass Indexer)。如果您真的不能这样做,请尝试
-
使用 Lucene 的 IndexUpgrader
-
在默认行为发生变化的情况下(请查看迁移指南),仔细更新 Hibernate Search 映射。
配置
我收到一条错误消息,说事件监听器未配置
完整的错误消息看起来像这样
Caused by: org.hibernate.HibernateException: Hibernate Search Event listeners not configured, please check the reference documentation and the application's hibernate.cfg.xml at org.hibernate.search.util.ContextHelper.getSearchFactoryBySFI(ContextHelper.java:32)
此错误有几种可能的原因。
-
您没有使用 Hibernate 注释,在这种情况下,事件监听器必须手动配置(另请参见在线文档中的事件监听器配置)。
<hibernate-configuration> <session-factory> <event type="post-update"/> <listener class="org.hibernate.search.event.FullTextIndexEventListener"/> </event> <event type="post-insert"/> <listener class="org.hibernate.search.event.FullTextIndexEventListener"/> </event> <event type="post-delete"/> <listener class="org.hibernate.search.event.FullTextIndexEventListener"/> </event> </session-factory> </hibernate-configuration>
其他版本需要更多事件监听器,而最新版本根本不需要任何监听器:请参考与您使用的版本相关的文档。 -
您正在使用错误版本的 Hibernate 注释/搜索。
Hibernate 注释尝试在启动时检测搜索并在找到它们的情况下配置事件监听器。但这要求您具有正确版本的依赖项。查看兼容性矩阵,了解 jar 文件的正确组合。如果您使用的是与 Hibernate Search 发行版一起提供的 jar 文件,请确保您确实安装了正确的 jar 文件,并且它们确实被使用。一些容器可能有一个共享的 lib 目录,其中包含所需库的旧版本。检查日志文件。每个 Hibernate 产品在启动时都会报告其版本。
-
如果您确定您正在使用正确版本的注释和搜索,并且您仍然遇到此异常,可能是您有一个自定义类加载配置,它阻止注释定位特定于搜索的事件监听器。如果是这种情况,请尝试手动配置。
如何开始使用搜索原型?
使用以下命令,为 archetypeVersion 指定最新的 Hibernate Search 版本(或您选择的版本)。
mvn archetype:generate -DarchetypeGroupId=org.hibernate -DarchetypeArtifactId=hibernate-search-quickstart -DarchetypeVersion=4.0.0.Final -DarchetypeRepository=http://repository.jboss.org/nexus/content/groups/public-jboss/
您需要指定组 ID、构件 ID 和版本。创建示例项目后,您可以检查源代码并运行例如 mvn test。
要获取存储库中所有可用原型的完整列表,请运行
mvn archetype:generate -DarchetypeRepository=http://repository.jboss.org/nexus/content/groups/public-jboss
集成
JBoss AS 4.2 中的 NoSuchMethodError
错误是:Caused by: java.lang.NoSuchMethodError: org.hibernate.search.FullTextSession.createFullTextQuery(Lorg/apache/lucene/search/Query;[Ljava/lang/Class;)Lorg/hibernate/search/FullTextQuery;
Hibernate Search 3.0 需要 Hibernate 注释 3.3.x,而 JBoss AS 4.2 附带 3.2.x。替换以下 jar 文件
-
hibernate-annotations.jar (3.3.x for Search 3.0)
-
hibernate-validator.jar (3.0.x for Search 3.0)
-
hibernate-entitymanager.jar (3.3.x for Search 3.0)
-
hibernate-commons-annotations.jar (3.0.x for Search 3.0)
在 [JBOSS_HOME]/server/[myconfig]/lib
中。然后将 Hibernate Search 和 Lucene JAR 放置到您的 EAR 或 WAR 中。
我正在使用 Spring,并且索引没有在事务提交时更新
另请参阅 spring 集成,并特别检查您是否正在使用正确的交易管理器
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">