我有一个动态查询,它依赖于文本索引和其他字段。我希望能够指定一个最小分数,这样低于最小分数的内容就不会从查询中返回,因为文本匹配并不真正接近我们要包含的结果。
我尝试了以下方法,但是查询并没有返回我所期望的结果,而是什么也没有返回。
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");发布于 2020-12-03 01:07:02
文本分数({ $meta: "textScore" })只能用于常规查询中的投影和排序。因此,查询不匹配任何文档。
欲知详情,请访问:Text Score Metadata
请使用Aggregation根据MongoDB reference documentation中所述的分数进行筛选。
https://stackoverflow.com/questions/65099676
复制相似问题