我们对查询引擎进行了大规模重构,因此标为alpha版。如果您能集中测试这个区域并查看是否存在任何问题,我们将不胜感激。
本次发布包含常规的错误修复、优化和新特性。
查询引擎重构
这是一个大项目,目标是确保它不会影响到您。我们的中期目标是使Hibernate Search不依赖于Hibernate Core。将查询引擎核心提取到定义良好的SPI(服务提供者接口)是这个目标的一个里程碑。第一个受益者是无缓存查询模块,它将能够更好地应对Hibernate Search版本变化。
如前所述,测试您的应用程序查询。它们应该仍然在没有任何API更改的情况下运行。如果否则,请告诉我们。
仅在索引属性更改时更新索引
在之前的版本中,当@Indexed实体在Hibernate Core中更改时,即使没有任何索引属性实际更改(毕竟并非所有属性都进行了索引),Hibernate Search也会重新索引实体。Hibernate Search 3.4在这个方面更聪明,并尝试不重新索引索引属性未更改的实体。在某些情况下,例如动态提升或类级桥接,Hibernate Search无法确定,因此始终重新索引以确保安全。
此优化应显著提高某些应用程序的速度。有关更多信息,请参阅文档。
在二级缓存中查找实体
在某些环境中,大多数甚至所有要搜索的实体都在二级缓存中。这在使用Infinispan等分布式二级缓存时尤其如此。您可以要求Hibernate Search在尝试从数据库获取数据之前先在二级缓存中查找实体。
FullTextQuery query = session.createFullTextQuery(luceneQuery, User.class); query.initializeObjectWith( ObjectLookupMethod.SECOND_LEVEL_CACHE, DatabaseRetrievalMethod.QUERY ); List results = query.getResultList();
当然,您的实体必须是可缓存的。如果您的实体很可能在持久化上下文中(Hibernate会话中),则可以使用ObjectLookupMethod.PERSISTENCE_CONTEXT代替。
MassIndexer改进
质量索引模块进行了一些改进。
- 文本分析阶段的多线程。
- 通过允许您插入自定义实现(参见MassIndexerProgressMonitor),改进了对质量索引模块状态和进度的监控。
分面搜索。
这是一个非常受欢迎且有用的特性,现在您可以尝试新分面搜索引擎API的第一个alpha预览版。
字段缓存。
现在可以使用Lucene的FieldCache来为查询性能提供额外的提升:请参阅参考文档。
其他性能改进。
我们找到了一些技巧来提高整体性能。我们更加积极地缓存一些元数据以降低反射开销,并且为您在Lucene中推送了一些额外的按钮以减少查询时间。
给我们反馈。
请给我们反馈,我们有一个积极的发布计划,因为我们正在计划本月底的GA版本。
在JBoss.org的Maven 仓库 或 下载发行版上查看新版本。您还可以阅读文档。
如果您发现任何问题,请提交。