Hibernate Search 是一个库,它通过自动索引实体将 Hibernate ORM 与 Apache Lucene 或 Elasticsearch 集成,从而启用高级搜索功能:全文搜索、地理空间搜索、聚合等。更多信息,请参阅 hibernate.org 上的 Hibernate Search。

我们刚刚发布了 Hibernate Search 版本 5.10.2.Final,这是 Hibernate Search 5.10 的第二次维护版本。此版本增加了之前缺失的对布尔连接中的 minimumShouldMatch 约束的处理。

新特性

大部分更改都是纯内部更改,与从源代码构建 Hibernate Search 有关。

唯一影响用户的是布尔连接中引入了 minimumShouldMatch 约束。这对于 Elasticsearch 集成的用户来说是一个问题,因为他们可以创建一个具有 minimumShouldMatch 约束的 Lucene BooleanQuery,但当查询被转换为 Elasticsearch 时,约束被忽略。现在这种情况不再存在。

我们利用这个机会将查询 DSL 的部分回滚,允许从下一个版本的 Hibernate Search 设置 minimumShouldMatch 约束。现在您可以使用类似以下代码

FullTextEntityManager fullTextEntityManager = Search.getFullTextEntityManager( entityManager );
QueryBuilder queryBuilder = fullTextEntityManager.getSearchFactory()
                .buildQueryBuilder().forEntity( MyEntity.class ).get();
Query luceneQuery = queryBuilder.bool()
                .minimumShouldMatchNumber( 2 ) // This is new
                .should( queryBuilder.keyword().onField( "foo" ).matching( "text1" ).createQuery() )
                .should( queryBuilder.keyword().onField( "bar" ).matching( "text2" ).createQuery() )
                .should( queryBuilder.keyword().onField( "foobar" ).matching( "text3" ).createQuery() )
                .createQuery();
FullTextQuery query = fullTextEntityManager.createFullTextQuery( luceneQuery, MyEntity.class );

...并且生成的查询将仅匹配至少满足两个 should 子句的文档。

还有更高级的语法,请参阅 org.hibernate.search.query.dsl.BooleanJunction 的 javadoc 获取更多信息。

如何获取此版本

所有详细信息均可在 hibernate.org 的专门页面上找到,并保持最新。

反馈、问题、想法?

要取得联系,请使用以下渠道


回到顶部