我们刚刚发布了 Hibernate Search 6.0.0.Beta10。
此版本主要带来了总命中次数阈值、条件索引、更好的超时设置以及针对 Elasticsearch 的每个索引分析器定义。
还包括 Lucene 8.6.1、Elasticsearch 7.9.0 和 Hibernate ORM 5.4.21.Final 的升级。
新增功能
总命中次数阈值
从 HSEARCH-3517 开始,Hibernate Search 现在可以利用 Lucene 的总命中次数阈值。
这种优化通常在网页搜索引擎中可以看到,总命中数以“超过 1,000,000 次命中”或其他大数字的形式显示,而不是确切的计数。
如果您的应用程序处理大型索引,并且可以接受对具有大量命中结果的查询的总命中次数的低估计,以从查询执行时间中节省几毫秒,那么您可以尝试它:您可以在 文档的这一部分 中找到更多信息。
此优化仅在执行默认按分数排序的搜索查询时适用。任何其他自定义排序可能都会阻止此优化应用。 |
条件索引
Hibernate Search 5曾允许通过定义实体索引拦截器来实现条件索引。这在仅需要对实体子集进行索引时特别有用,例如仅对状态为PUBLISHED
的实体进行索引,而其他实体应被忽略。
从HSEARCH-3108开始,此功能回归Hibernate Search 6,但形式略有不同。您需要定义一个RoutingBridge
,而不是覆盖索引操作(添加/更新/删除等),而是定义文档在索引时应遵循的路线(可能没有路线,当不索引时)。
有关更多信息,请参阅文档的此部分。
Elasticsearch的按索引分析器定义
从HSEARCH-3309开始,使用Elasticsearch后端,现在可以在特定索引上定义分析器,而不是在所有索引上全局定义。
这在向现有应用程序添加非常特定的分析器时特别有用,并且当此分析器仅对少数索引相关时:现在您只需在这些索引上添加分析器,如果映射未在其他任何方式更改,则无需重新创建不受影响的索引。
为特定索引配置分析器与设置配置属性hibernate.search.backend.indexes.<index name>.analysis.configurer
为您的分析配置器名称/类一样简单。这将覆盖后端级别的分析配置器,允许您根据需要为此索引(仅为此索引)配置分析器和规范器。
有关更多信息,请参阅文档的此部分。
改进的超时时间
从HSEARCH-3787开始,搜索查询超时现在将在加载实体时正确传递给Hibernate ORM。
以前,当在搜索查询上设置500ms超时时,如果Lucene或Elasticsearch执行花费200ms,然后数据库查询加载实体花费5秒,则超时不会触发。现在不再是这种情况。
Hibernate ORM超时仅精确到秒,因为底层层JDBC的限制。因此,在上面的例子中,Hibernate ORM将在1秒后终止(这仍然比5秒要好)。 |
此外,从HSEARCH-2505开始,Elasticsearch后端超时的工作方式略有不同
-
默认连接超时,如果建立连接花费时间过长则终止连接,从3秒降至1秒。
-
默认读取超时,如果Elasticsearch响应时间过长则取消请求,从60秒降至30秒。
-
请求超时,为Hibernate Search处理、发送和接收请求响应设置硬截止日期,现在默认无限制。
这意味着默认情况下,同时发送许多索引请求,然后长时间等待它们全部处理,不应导致内部超时,因为许多请求都在队列中等待。
-
需要更高超时的请求(特别是具有显式定义超时的搜索查询)将自动根据每个请求的需要提高请求超时和读取超时。
这意味着在执行搜索查询时,即使显式指定一个非常大的超时时间,也不再会收到低级超时。
-
搜索查询的超时现在将适当考虑内部队列中花费的时间。
这意味着如果一个搜索查询的超时时间是500ms,并且它在内部队列中花费了600ms而没有被发送,它现在将如预期地终止。
版本升级
-
HSEARCH-3989:升级到Hibernate ORM 5.4.21.Final
-
HSEARCH-3983:升级到Lucene 8.6.1
-
HSEARCH-3984:升级到Elasticsearch 7.9.0
Hibernate Search 6需要ORM 5.4.4.Final或更高版本才能正确工作。更早的5.4.x版本可能导致潜在的神秘运行时异常。 |
重大变更
-
HSEARCH-3979:
@IndexedEmbedded(maxDepth = …)
已被重命名为includeDepth
。旧语法已弃用,将在6.0.0.Final
版本之前删除。 -
SearchResult#totalHitCount()
现在已被total().hitCount()
取代。旧语法将在6.0.0.Final
版本之前删除。 -
RoutingKeyBridge
和RoutingKeyBinder
现在已被弃用。您应使用RoutingBridge
和RoutingBinder
代替;请参阅文档中的此部分。旧接口将在6.0.0.Final
版本之前删除。 -
HSEARCH-2505:Elasticsearch后端的默认超时已更改(请参阅改进的超时)
-
默认连接超时从3秒降至1秒。
-
默认读取超时从60秒降至30秒。
-
请求超时现在默认无限制。
-
需要更高超时的请求将自动为每个请求基于请求设置相应的超时。
-
-
Search DSL的一些接口现在有不同的泛型参数;这只会影响将DSL步骤存储到变量的应用程序,这通常不建议使用(请使用流畅的语法代替)。
其他改进和错误修复
-
HSEARCH-3975:由
Search.toOrmQuery(…)
返回的查询现在支持scroll()
和scroll(ScrollMode.FORWARD_ONLY)
。 -
HSEARCH-3980:现在可以通过从元模型获取其描述符,然后调用
IndexFieldDescriptor#multiValuedInRoot
来确定根文档中的给定字段是否为多值。 -
HSEARCH-3988:调用
search(…).select(…)
不再删除加载选项的类型,防止其定义。 -
HSEARCH-3993:类型
char
、boolean
、byte
、float
、double
及其相应的包装类型现在可以作为文档标识符直接使用。
等等。有关上一版本以来的完整更改列表,请参阅发布说明。
如何获取此版本
所有详细信息都可在hibernate.org上的专用页面上找到并保持最新。