介绍
你曾经尝试使用文本研究与MongoDB的C#3.2驱动程序?那么我们可以说,它不是那么容易,因为它的声音......这里有一些建议。
构建文本索引
首先,所有的文本研究,你必须有类型的索引,文字上要搜索每个集合。
该请求将创建一个名为“MyField的”的字符串字段文本索引“MyFieldTextIndex”:
隐藏 复制代码
MyCollection.Indexes.CreateOne(
Builders<BsonDocument>.IndexKeys.Text("MyField"),
new CreateIndexOptions() {DefaultLanguage = "french",Name="MyFieldTextIndex"});
此请求将创建文本索引“TextIndex”在“MyCollection的”ALL字符串字段:
隐藏 复制代码
MyCollection.Indexes.CreateOne(
Builders<BsonDocument>.IndexKeys.Text("$**"),
new CreateIndexOptions() {DefaultLanguage = "french",Name="TextIndex"});
在“DefaultLanguage”参数,指定文本的语言会说的MongoDB至极停止字字典使用。默认为“英语”。
查询数据
现在,您可以通过使用聚合管道或标准查询管道查询您的收藏。
如何查询和通过评分排序:
隐藏 复制代码
MyCollection.Aggregate()
.Match(Builders<BsonDocument>.Filter.Text("firstword secondword"))
.Sort(Builders<BsonDocument>.Sort.MetaTextScore("textScore"))
.ToList());
在此查询,MongoDB的将搜索在所有“MyCollection的”“firstword”或“secondword”的文件。
如果你想获得文档分数是什么:
隐藏 复制代码
MyCollection.Aggregate()
.Match(Builders<BsonDocument>.Filter.Text("firstword secondword"))
.Project(Builders<BsonDocument>.Projection.MetaTextScore("textScore"))
.Sort(Builders<BsonDocument>.Sort.MetaTextScore("textScore"))
.ToList());
通过使用聚合管道,将投影比分变成在新文档场“textScore”,只有保存了“比赛”结果文档领域的“_id”...
如果你想要得到的结果文档和分数,你应该使用通过查找标准查询管道:
隐藏 复制代码
MyCollection.Find(Builders<BsonDocument>.Filter.Text("firstword secondword"))
.Project(Builders<BsonDocument>.Projection.MetaTextScore("textScore"))
.Sort(Builders<BsonDocument>.Sort.MetaTextScore("textScore"))
.ToList());
随着标准的管道,“项目”的方法将你的BsonDocument的末尾添加双类型字段“textScore”。
您可以通过使用一个AndFilter或或滤波器与其他FieldFilter结合你TextFilter,但 你不能在查询中添加多个TextFilter:
隐藏 复制代码
MyCollection.Find(
Builders<BsonDocument>.Filter.And(Builders<BsonDocument>.Filter.Text("firstword secondword"),
Builders<BsonDocument>.Filter.Eq("AnotherField","fieldvalue")))
.Project(Builders<BsonDocument>.Projection.MetaTextScore("textScore"))
.Sort(Builders<BsonDocument>.Sort.MetaTextScore("textScore"))
.ToList());
查询是好的,它会返回匹配TextFilter在哪里,所有文件“AnotherField”等于“fieldValue方法”。
隐藏 复制代码
MyCollection.Find(
Builders<BsonDocument>.Filter.And(Builders<BsonDocument>.Filter.Text("firstword secondword"),
Builders<BsonDocument>.Filter.Text("fieldvalue")))
.Project(Builders<BsonDocument>.Projection.MetaTextScore("textScore"))
.Sort(Builders<BsonDocument>.Sort.MetaTextScore("textScore"))
.ToList());
查询是错误的(即使智能感知说OK),并会崩溃,因为是二TextFilter ...
兴趣点
这是所有乡亲!我希望这些小技巧可以帮助你在文本研究与MongoDB的。