当前位置:首页 > 开发教程 > .net教程 >

MongoDB的3.2,C#MongoClient 2.x中,TextResearch:如何应对?

时间:2016-06-01 09:00 来源:互联网 作者:源码搜藏 收藏

对于那些谁在MongoDB中3.2文本研究与新的C#驱动程序处理,这里有一些建议。 介绍 你曾经尝试使用文本研究与MongoDB的C#3.2驱动程序? 那么我们可以说,它不是那么容易,因为它的声音......这里有一些建议。 构建文本索引 首先,所有的文本研究,你 必须 有
对于那些谁在MongoDB中3.2文本研究与新的C#驱动程序处理,这里有一些建议。

介绍

你曾经尝试使用文本研究与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的。



.net教程阅读排行

最新文章