我使用querydsl构建动态搜索查询(和使用弹簧数据mongodb的API来执行它)。有没有一种方法可以构造支持$ text(全文本)搜索的querydsl查询?
答案 0 :(得分:0)
这是一个老问题,但如果将来有人偶然发现它,我可以将 MongoDB 全文搜索封装在 Querydsl Predicate
中,如下所示:
import com.querydsl.core.types.ExpressionUtils;
import com.querydsl.core.types.dsl.Expressions;
public static Predicate toTextPredicate(final TextCriteria criteria) {
final var path = ExpressionUtils.path(Document.class, "$text");
final var value = Expressions.constant(criteria.getCriteriaObject().get("$text"));
return ExpressionUtils.predicate(Ops.EQ, path, value);
}
拥有 Predicate
后,您可以通过 BooleanBuilder
等将其与任何其他搜索词组合。组装 Spring Data MongoDB TextCriteria
留给读者作为练习。它在别处有详细记录。
您可以在没有 Spring Data MongoDB 的情况下通过手动构建 MongoDB $text
约束文档来执行相同的操作。
这在通过 $text
中的 Ops.EQ
块添加 MongodbDocumentSerializer
约束的方式上有点偷偷摸摸,但在没有一流支持的情况下它“足够好”在 Querydsl 本身中。