Определение минимального значения в запросе TextCriteria с данными Mongo Spring

#java #mongodb #spring-boot #spring-data #spring-data-mongodb

#java #mongodb #spring-загрузка #spring-данные #spring-data-mongodb

Вопрос:

У меня есть динамический запрос, который зависит от текстового индекса, а также других полей. Я хочу иметь возможность указать минимальный балл, чтобы из запроса не возвращались данные ниже минимального, потому что соответствие текста недостаточно близко к тому, что мы собираемся включить в результаты.

Я попробовал следующее, но вместо того, чтобы вернуть мне то, что я ожидал, запрос просто ничего не возвращает.

         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. Поиск в MongoDB Atlas был бы гораздо лучшим способом для достижения этой цели. Таким образом, вы получите оценку релевантности Lucene из коробки. Это быстрее, лучше и более специфично для языка.

Ответ №1:

Текстовая оценка ( { $meta: "textScore" } ) может использоваться только для проецирования и сортировки в обычных запросах. Поэтому запрос не соответствует никаким документам.
Для получения более подробной информации, пожалуйста, смотрите: Метаданные текстовой оценки

Пожалуйста, используйте Aggregation для фильтрации по баллам, как описано в справочной документации MongoDB.