首页 > 解决方案 > JPQL 之类的查询忽略 blob/html 和多个关键字的大小写

问题描述

我的 spring boot 项目中有一个自定义 jpql 查询,如果存在某个关键字(可以是多个单词,例如“我正在搜索”),它会在 blob 文件(HTML 内容)中搜索。它就像一个搜索引擎。但我想忽略区分大小写。所以在网上搜索后,我做了以下查询:

/**
     * Custom query to search in results
     * @param keyword keyword to search with
     * @param startDate to search between
     * @param endDate to search between
     * @return list of all results
     */
    @Query("select r from Requests r where lower(r.document) like lower(concat('%', :keyword, '%')) and (r.timestamp between :startDate and :endDate) ")
    List<Requests> searchRequests(
            @Param("keyword") String keyword, @Param("startDate") Date startDate, @Param("endDate") Date endDate);

但是现在它似乎不适用于关键字字符串中的多个单词,一个单词就可以了。

如果我将其更改为:

/**
     * Custom query to search in results
     * @param keyword keyword to search with
     * @param startDate to search between
     * @param endDate to search between
     * @return list of all results
     */
    @Query("select r from Requests r where r.document like %:keyword% and (r.timestamp between :startDate and :endDate) ")
    List<Requests> searchRequests(
            @Param("keyword") String keyword, @Param("startDate") Date startDate, @Param("endDate") Date endDate);

它适用于keyword字符串中的多个单词,但它区分大小写......

我不确定这是为什么,但可能是因为 r.document 是一个包含 HTML 页面的 blob 文件?但是它确实适用于keyword字符串中的单个单词。所以也许它只会降低字符串值中的第一个单词keyword

标签: javaspring-bootspring-data-jpajpql

解决方案


推荐阅读