我即将从Hibernate 5迁移到Hibernate search 6,并正在寻找一些建议。据我所知,版本6的主要意图是将API与底层实现更多地解耦。我在代码中有这样的内容:
FullTextEntityManager fullTextEntityManager = Search.getFullTextEntityManager(entityManager);
SearchFactory searchFactory = fullTextEntityManager.getSearchFactory();
QueryBuilder queryBuilder = searchFactory.buildQueryBuilder().forEntity(Service.class).get();
BooleanJunction<?> bool = queryBuilder.bool();
Analyzer analyzer = searchFactory.getAnalyzer("standard");
if (StringUtils.isNotBlank(searchString)) {
MultiFieldQueryParser multiFieldQueryParser = new MultiFieldQueryParser(new String[] {
"name", "description", "company.name", "configuration.name",
}, analyzer);
multiFieldQueryParser.setDefaultOperator(QueryParserBase.AND_OPERATOR);
org.apache.lucene.search.Query querySearchString = multiFieldQueryParser.parse(searchString);
bool.must(querySearchString);
}
Query fullTextQuery = fullTextEntityManager.createFullTextQuery(bool.createQuery(), Service.class);
return fullTextQuery.getResultList();
MultiFieldQueryParser、QueryParserBase和Query都是lucene后端的类,有没有可能用纯hibernate搜索查询语法(Query DSL)实现同样的查询?
我找到了一些简单的字段示例,但是我可以使用类似“www.example.com”的内容company.name来注解@IndexedEmbedded的相关实体字段吗?
感谢和最好的问候马特
谢谢
1条答案
按热度按时间h7appiyu1#
是的,这应该是可能的。接下来的一些事情:
在这里查看嵌套结构的文档-https://docs.jboss.org/hibernate/stable/search/reference/en-US/html_single/#mapper-orm-indexedembedded-structure。这里有您正在寻找的示例。此外,建议您查看迁移指南-https://docs.jboss.org/hibernate/search/6.0/migration/html_single/。它包含了许多关于从5迁移到6的有用信息