使用c#Driver 2.4.4进行MongoDB文本搜索

时间:2017-10-13 03:07:39

标签: c# mongodb

我在c#中使用MongoDB。要搜索“知识”集合中的“问题”,这是我的代码。

 var collection = _database.GetCollection<BsonDocument>("knowledge");
 var filter = Builders<BsonDocument>.Filter.Eq("question", question);
 var results = await collection.Find(filter).ToListAsync();

而不是这个我想搜索包含给定单词的'问题'。我想在MongoDB中搜索一个简单的模式。

 db.stores.find( { $text: { $search: "java \"coffee shop\"" } } )

我在堆栈中发现了这个。

  collection.Indexes.CreateOne(Builders<searchFileByAuthor>.IndexKeys.Text(x=>x.subject));
 collection.Find(Builders<searchFileByAuthor>.Filter.Text("coffe")).ToList();

Full text search in mongodb in .net

我不熟悉在c#中使用MongoDB。我应该如何修改我的代码来创建文本索引并搜索模式?如何在MongoDB .NET驱动程序版本2.4.4中执行此操作?

2 个答案:

答案 0 :(得分:3)

要创建搜索模式,您可以使用“正则表达式”构建器。在描述字段中匹配“java”或“coffee shop”的示例:

var collection = _database.GetCollection<BsonDocument>("knowledge");
var builder = Builders<BsonDocument>.Filter;
var filter = builder.Regex("description", "(java)") | builder.Regex("description", "(coffee shop)");
var result = collection.Find(filter).ToList();

答案 1 :(得分:1)

您可以使用全文搜索

Collection.Indexes.CreateOne(new CreateIndexModel<T>(Builders<T>.IndexKeys.Text("$**")));

//构建过滤器并进行查询

var key = txtSearchKey.Text.ToLower().Trim();
var filter = Builders<EntityObject>.Filter.Text(key);