我有一个动态查询,它依赖于文本索引和其他字段。我希望能够指定一个最低分数,这样在查询中就不会返回低于最低分数的内容,因为文本匹配与我们要包含的结果还不够接近。
我尝试了以下方法,但是查询没有返回我所期望的结果,而是什么也不返回。
Query dynamicQuery = new Query().with(pageable);
if(includeSearch){
TextCriteria textCriteria = TextCriteria.forDefaultLanguage().matchingAny(search.trim());
Criteria minScoreCriteria = Criteria.where("score").gte(2.0);
dynamicQuery.addCriteria(textCriteria);
dynamicQuery.addCriteria(minScoreCriteria);
}
if(includeSomethingElse){
Criteria genreCriteria = Criteria.where("somethingelse").in(list);
dynamicQuery.addCriteria(genreCriteria);
}
if(includeAnotherThing){
Criteria bpmCriteria = Criteria.where("anotherThing").gte(range[0]).lte(range[1]);
dynamicQuery.addCriteria(bpmCriteria);
}
List<MyClass> vos = mongoTemplate.find(dynamicQuery, MyClass.class, "collection_name");
1条答案
按热度按时间dpiehjr41#
文本分数(
{ $meta: "textScore" }
)只能用于常规查询中的投影和排序。因此,查询与任何文档都不匹配。有关更多详细信息,请参阅:文本分数元数据
请使用
Aggregation
按照mongodb参考文档中的描述过滤分数。