【发布时间】:2021-03-27 23:54:29
【问题描述】:
我尝试在 Criteria API Builder 中实现 MySQL 全文搜索,但我坚持在自定义函数中传递多列列表。
自定义 MySQL 方言以启用 MATCH AGAINST 功能:
import org.hibernate.dialect.MySQL5Dialect;
import org.hibernate.dialect.function.SQLFunctionTemplate;
import org.hibernate.type.StandardBasicTypes;
public class CustomMySQL5Dialect extends MySQL5Dialect {
public CustomMySQL5Dialect() {
super();
registerFunction("match", new SQLFunctionTemplate(StandardBasicTypes.DOUBLE, "match(?1) against (?2 in boolean mode)"));
}
}
楼盘查询客服部分:
Specification.where((root, query, cb) -> {
Expression<Double> match = cb.function(
"match",
Double.class,
root.get(Customer_.FIRST_NAME),
cb.literal("mySearchTerm")
);
return cb.greaterThan(match, 0.);
});
但现在我想扩展全文搜索以搜索多列。最终 SQL 应如下所示:
SELECT * FROM customer WHERE MATCH (first_name,last_name) AGAINST ('mysearchterm' IN BOOLEAN MODE) > 0.0
那么,有谁知道如何为第一个参数传递列名列表。
【问题讨论】:
标签: spring spring-boot hibernate jpa hibernate-criteria