java - 使用 MYSQL 的 Spring JPA 规范全文搜索

标签 java mysql spring spring-data-jpa jpa-criteria

我正在尝试使用 Spring JPA 规范创建全文搜索。我要完成的查询如下。

SELECT * FROM Station WHERE MATCH(Slogan, Description) AGAINST('searchText' IN BOOLEAN MODE);

如何在允许我传入“searchText”值的 Spring JPA 规范中编写此查询?这是我迄今为止的尝试。

public static Specification<Station> fullTextSearch(String searchText) {
    if (searchText == null) {
        return null;
    }

    return (Root<Station> root, CriteriaQuery<?> query, CriteriaBuilder cb) -> {

        List<Predicate> predicates = new ArrayList<>();
        Expression<Double> match = cb.function("match", Double.class,
                root.get("description"),
                cb.parameter(String.class, "searchText"));

        // TODO: How do I set "searchText"?????

        predicates.add(cb.greaterThan(match, 0.));
        return cb.and(predicates.toArray(new Predicate[]{}));
    };
}

然后调用就可以使用了:

 Specifications<Station> spec = Specifications.where(StationSpecifications.fullTextSearch(query));
 stationRepository.findAll(spec, pageable);

我第一次尝试使用的文章: http://pavelmakhov.com/2016/09/jpa-custom-function

最佳答案

我提出的解决方案并不理想,但基于@dimirsen 的建议。可分页对象已添加到查询中并按预期工作。

@Query(value = "SELECT * FROM Station s WHERE MATCH(s.slogan, s.description) AGAINST(?1 IN BOOLEAN MODE) ORDER BY ?#{#pageable}",
        countQuery = "SELECT * FROM Station s WHERE MATCH(s.slogan, s.description) AGAINST(?1 IN BOOLEAN MODE)",
        nativeQuery = true)
Page<Station> fullTextSearch(String searchText, Pageable pageable);

关于java - 使用 MYSQL 的 Spring JPA 规范全文搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48160832/

相关文章:

java - Spring MVC 自定义转换器不工作

java - 期待 EOF,发现 'for' - 处理中

java - Java 中的 Perlin 噪声

Python pymysql - 遍历 mysql 表键和值

php - 如何在数据库中解析和插入数据

java - 如何获取 URL 查询字符串值

Spring 的 Camel : Process finished with exit code 0

java - 如何对依赖于 Channel API 的代码进行单元测试(Google App Engine,Java)

java - 如何将一个int按数字转换为数组数字

mysql - 如何从表中每条记录的日期/时间字段中减去 2 小时?