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

Micronaut数据分页全文搜索查询

祁均
2023-03-14

我使用的是Micronaut数据版本1.0.2。

给定以下JPA实体类:

@Entity
public class Product {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    private String code;
    private String name;
    private String fullName;
}

我可以使用PageableRepository的以下方法创建全文搜索查询:

@Repository
public interface ProductRepository extends PageableRepository<Product, Long> {
    Slice<Product> findByCodeLikeOrNameLikeOrFullNameLike(
        String code, String name, String fullName, Pageable pageable);
}

但是,我有一个问题,需要为名称属性添加另一个标准。我想要实现的相当于以下SQL:

select * from product
where code like '%search%' 
or (name like '%search%' and name not like '%-%')
or full_name like '%search%'

我测试了以下方式:

Slice<Product> findByCodeLikeOrNameLikeAndNotLikeOrFullNameLike
Slice<Product> findByCodeLikeOrNameLikeAndNotContainsOrFullNameLike
Slice<Product> findByCodeLikeOrNameLikeAndNameNotLikeOrFullNameLike
Slice<Product> findByCodeLikeOrNameLikeAndNameNotContainsOrFullNameLike

知道怎么让它工作吗?

提前感谢。

共有1个答案

文凯康
2023-03-14

如果使用查询,则应该是这样的:

@Query(value = "select p from Product p where (p.code like :code or p.fullName like :fullName or p.name like :name) and p.name not like :ignoreName") 
Slice<Product> fullSearch(String code, String name, String ignoreName, String fullName, Pageable pageable);

在这里,您可以省略CountQuery,因为您使用Slice

如果要使用第页

喜欢:

countQuery = "select count(p.id) from Product p where (p.code like :code or p.fullName like :fullName or p.name like :name) and p.name not like :ignoreName")

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

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

  • 带有Mongoose的MongoDB(3.2.0) 收藏: 用户 null 查询: =>找到 =>找到(搜索大小写敏感为false) =>找到(使用diacriticSensitive搜索为false) =>找到(部分搜索) =>未找到(部分搜索) =>未找到(部分搜索) 你知道为什么我用查询“Leo”或“L”得到0个结果吗? null

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

  • 我尝试在弹性搜索java api上使用正则表达式运行全文搜索。我的过滤器是这样的: 但是它只与一个单词匹配,而不是与短语匹配。我的意思是,例如: 如果soruce中有一个字符串,如:“

  • 问题内容: 使用Sql Server 2008,您如何才能使用全文本搜索实际找到完全匹配的字符串。我对此很难过,只是在网上的任何地方都找不到令人满意的解决方案。 例如,如果我要搜索字符串“ Bojan Skrchevski”,则我希望第一个结果就是那个。 到目前为止,我已经尝试将字符串格式化为“ Bojan * NEAR Skrchevski *”并调用CONTAINSTABLE以获取结果,但是此