是否querydsl MongoDB的支持$文本(全文)搜索? (将querydsl与spring数据mongodb一起使用)

时间:2019-01-31 18:18:53

标签: spring-data-mongodb querydsl

我使用querydsl构建动态搜索查询(和使用弹簧数据mongodb的API来执行它)。有没有一种方法可以构造支持$ text(全文本)搜索的querydsl查询?

1 个答案:

答案 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 本身中。