当前位置: 首页 > 知识库问答 >
问题:

将Spring数据JPASpecificationExecutor/QueryByDsl与Hibernate全文搜索6.0混合

孙清野
2023-03-14

我有一个实体说

class Employee {
    private long id;
    private String name;
    private String title;
    private String jobDescription; // Free Text
}

当调用以下url时,我可以在多个字段上搜索/筛选数据

http://localhost:8080/employee?name=jack&jobdescritpion=developer

public interface EmployeeRepository extends PagingAndSortingRepository<Employee, Long>, QuerydslPredicateExecutor<Employee>, QuerydslBinderCustomizer<Employee>
@Override
default void customize(QuerydslBindings bindings, QEmployee employee) {
    bindings.bind(String.class)
        .first((StringPath path, String value) -> path.containsIgnoreCase(value));
}
SearchResult<Employee> searchResult = searchSession.search(Employee.class)
    .where(f ->f.match()
        .field("jobDescription")
        .matching(keywords)
        .fuzzy()).fetch(offset,size);

在这里我有两个选择:

  1. 在Lucene中索引所有字段
  2. 索引仅在Lucene
  3. 中使用JobdesCritpion

我对这两种选择都没意见。问题是如何将它与JPA集成,以便以下url仍然有效,只是这次查询是从Hibernate搜索索引构建并由JPA执行的:

共有1个答案

通沛
2023-03-14

您实际上只有一个选择,那就是索引Lucene中的所有字段。虽然可以依靠数据库,其中和Lucene查询来实现搜索查询,但它的性能并不好,尤其是在使用分页时。

关于如何通过jpaspecificationquerybydsl使用Hibernate搜索查询...我对这项技术不太熟悉,所以对此要半信半疑。

但我知道有人试图将Hibernate Search5(旧版本)与Snowdrop项目集成到Spring中。我想您必须对Hibernate Search6进行同样的操作。

 类似资料:
  • 假设我有一个存储加密文本的服务器(端到端:服务器永远看不到纯文本)。 我希望能够对该文本进行全文搜索。 我知道这很棘手,但我的想法是使用传统的全文设计(“列表”和“匹配”表,其中存储单词并与内容表中的id匹配)。当用户提交加密文本时,他们还会发送单词和各自匹配的加盐MD5。使用的盐对于每个用户都是唯一的,并且从他们的密码中恢复。 (简而言之:唯一的区别是“列表”表将包含哈希单词) 现在,这个系统会

  • 回顾 在前面的章节(分页),我们已经加强了数据库查询,因此能够在页面上获取各种查询。 今天,我们会继续探讨数据库的话题,只是领域不同。所有存储内容的应用程序必须提供搜索能力。 许多其它类型的网站可能使用了谷歌、必应等索引所有的内容并且提供查询结果。这个对于大多数静态页面的网站,像论坛,是很好用。我们应用程序 microblog 的基本单元是用户短小的 blog,不是整个页面。我们希望搜索结果是动态

  • 我有两个实体。父母和孩子。 儿童知识库。JAVA 我试图通过标准找到子实体,它应该总是有父实体。 我得到一个例外,它试图在地址表中找到parentObj。 我找到了这个链接,并尝试了Joep给出的解决方案,但出现了相同的错误。 Spring数据JPA JpaSpecificationExecator EntityGgraph 我错过了什么。我无法理解为什么/如何在just Child对象中查找pa

  • 我需要运行以下查询: 但我不能用spring data elasticsearch轻松运行这个。 有什么办法吗 spring data elasticsearch是否很好地支持所有elasticsearch查询DSL

  • 我使用的是Micronaut数据版本1.0.2。 给定以下JPA实体类: 我可以使用的以下方法创建全文搜索查询: 但是,我有一个问题,需要为名称属性添加另一个标准。我想要实现的相当于以下SQL: 我测试了以下方式: 知道怎么让它工作吗? 提前感谢。

  • 问题内容: 我尝试在elasticsearchJava API上使用正则表达式运行全文搜索。我的过滤器是这样的: 但是它只与一个单词匹配,而没有短语匹配。我的意思是,例如: 如果soruce中有一个字符串,例如:“ ”,而当我的文本字符串如下:“ ”,“ ”,“ ” …时,它就起作用了。 但是,当我的realTimeTextIn字符串为“ ”时,全文搜索将不起作用。我搜索的单词不能超过一个。 我在