在MongoDB中搜索文本时,$ text查询错误需要文本索引

时间:2020-05-15 20:13:02

标签: c# .net mongodb

我在MongoDB中有一个集合,并且在一个文件上创建了一个索引,如下所示:

var indexOptions = new CreateIndexOptions();
var indexKeys = Builders<Book>.IndexKeys.Ascending(book=> book.title);
var indexModel = new CreateIndexModel<Book>(indexKeys, indexOptions);
collection.Indexes.CreateOneAsync(indexModel);

之后,我要在集合中搜索如下文本:

var filter = Builders<Book>.Filter.Text(textToSearch);
var result = collection.Find(filter).ToList(); // Error occurs here

但是我收到“命令查找失败:$ text查询需要文本索引。”最后一行错误。

更新:

我在mongo命令行界面中手动创建了索引:

db.Book.createIndex({title:1})

但是没有用。

1 个答案:

答案 0 :(得分:0)

您需要为Text Index创建Text operator才能工作,作为例外,您没有文本索引,因为您正在创建单个字段索引,请详细了解{{3 }}

要在代码中解决此问题,您将不得不替换

var indexKeys = Builders<Book>.IndexKeys.Ascending(book=> book.title);

与此

var indexKeys = Builders<Book>.IndexKeys.Text(book=> book.title);

也很高兴知道如何通过mongoshell创建此索引

db.Book.createIndex({title:"text"})