Как сгруппировать результаты текстового поиска в mongodb? - PullRequest
0 голосов
/ 28 апреля 2020

У меня есть два класса, которые называются place и review следующим образом:

@Document(collection = "place")
public class Place {
@Id 
private String id;
private String place_name;
//getters and setters are also written
}

и:

@Document(collection = "review")
public class Review {

public Review() {
}

@Id
private String id;    

@TextIndexed(weight=3)
private String first_point;

@TextIndexed(weight=2)
private String second_point;

@TextIndexed(weight=1)
private String third_point;

@DBRef
private Place place;

@DBRef
private User user;

private String date;
//getter and setters are also available
}

Я использовал следующий код для добавления полного текста search:

public List<Review> searchReviews(String text) {

 TextQuery textQuery = TextQuery.queryText(new   TextCriteria().matchingAny(text)).sortByScore();
  List<Review> reviews = mongoTemplate.find(textQuery, Review.class);
}

Это работает, но я не могу сгруппировать результаты, так как у меня нет aggregation. Нет ли способа использовать этот запрос find в конвейере aggregation? Или есть ли способ сгруппировать результаты без aggregation?

ОБНОВЛЕНИЕ:

Я изменил свой код на следующее:

 TextCriteria criteria = TextCriteria.forDefaultLanguage().matchingAny(text);
     MatchOperation match = Aggregation.match(criteria);
     GroupOperation group = Aggregation.group("first_point");
     Aggregation aggregation = Aggregation.newAggregation(match, group);

     AggregationResults<CommentAggregationResults> results = mongoTemplate.aggregate(aggregation, Review.class, MyAggregationResults.class);

     List<MyAggregationResults> foos = results.getMappedResults();

     System.out.println("size is: "+foos.size());
        System.out.println("output = "+foos.get(0).getFirstPoint());

Теперь проблема в том, что foos.size() возвращает 1, но результат следующей строки null.

...