Vai*_*Raj 3 java mongodb spring-data-mongodb
我需要在名为blog的集合中搜索文档,该集合具有为标题、标签、摘要和正文定义的文本索引:
@Document(collection="blog")
public class Blog {
@Id
private String id;
@TextIndexed(weight = 10)
private String title;
@TextIndexed(weight = 9)
private String tags;
@TextIndexed(weight = 8)
private String summary;
@TextIndexed(weight = 7)
private String body;
@TextScore
private Float score;
//getters and setters
}
Run Code Online (Sandbox Code Playgroud)
现在,我需要根据以下条件对博客集合进行文本搜索:
对于第二种情况TextCriteria定义如下:
TextCriteria criteria = TextCriteria.forDefaultLanguage().matching("SingleWord");
Run Code Online (Sandbox Code Playgroud)
对于第三种情况,如何在单个查询中编写组合的条件定义:
query 1: db.articles.find( { $text: { $search: "\"coffee cake\"" } } ) //phrase search
query 2: db.articles.find( { $text: { $search: "coffee cake" } } ) //word search
Run Code Online (Sandbox Code Playgroud)
我可以执行搜索吗
query 1 OR query 2 with sorted result based on score.
Run Code Online (Sandbox Code Playgroud)
完整短语匹配的结果分数应该更高。
Spring Data MongoDB 支持以下文本搜索操作:
TextCriteria.forDefaultLanguage().matchingAny("search term1", "search term2")TextCriteria.forDefaultLanguage().matching("search term")TextCriteria.forDefaultLanguage().matchingPhrase("search term")第一个条件可以执行文本搜索:search、text1 和 text2 第二个条件可以执行文本搜索:search、term 第三个条件用于短语搜索:“搜索词”
可以使用上述条件形成文本查询:
Query query = TextQuery.queryText(TextCriteria.forDefaultLanguage().matchingAny("search term").sortByScore().with(new PageRequest(pageNum, docCount, new Sort(new Order(Sort.Direction.DESC, "score"))));
Run Code Online (Sandbox Code Playgroud)
要使用分数(文本搜索分数)进行排序,我们需要在相应的 POJO 中添加一个名为 Score 的字段:
@TextScore
private Float score;
Run Code Online (Sandbox Code Playgroud)
我们可以在文本查询上添加其他过滤器,如下所示:
query.addCriteria(Criteria.where("city").is("Delhi").and("country").is("India").and("price").lte(200.50).gte(100.50);
Run Code Online (Sandbox Code Playgroud)
最后执行这个查询:
List<Product> products = mongoOperations.find(query, Product.class)
Run Code Online (Sandbox Code Playgroud)
Mongodb 默认情况下会为短语匹配分配更高的分数。因此,在需要较高分数的短语匹配然后再进行普通文本匹配的情况下,不需要先查找短语匹配。
| 归档时间: |
|
| 查看次数: |
11679 次 |
| 最近记录: |