通过C#驱动程序在MongoDB集合上创建文本索引的最佳方法

时间:2014-04-30 08:33:13

标签: mongodb mongodb-.net-driver

在MongoDB 2.6.0中使用C#驱动程序的v1.9.0(编写本文时为最新版本)

目前通过C#驱动程序在集合上创建文本索引的最佳方法是什么?

据我所知,MongoCollection.CreateIndex无法实现?因此,目前正在使用MongoDatabase.Eval创建它,如下所示:

Database.Eval(new EvalArgs { Code = "function(){db.dummycollection.ensureIndex({\"$**\" : \"text\"},{name:\"TextIndex\"});}"

我错过了什么/有更好的方法吗?

3 个答案:

答案 0 :(得分:4)

刚刚验证以下内容适用于1.9.0 C#驱动程序和MongoDB 2.6.0-rc2:

MongoCollection.CreateIndex(new IndexKeysDocument("Markdown", "text"));

(这也适用于较旧的司机)

修改

djch的回答显示了使用1.9驱动程序的更好方法,因为它也可以使用stronly-typed,例如:

MongoCollection.CreateIndex(IndexKeys<MyClass>.Text(p => p.Markdown));

答案 1 :(得分:2)

这应该有效:

collection.EnsureIndex(IndexKeys.Text("a", "b").Ascending("c"), IndexOptions.SetTextLanguageOverride("idioma").SetName("custom").SetTextDefaultLanguage("spanish"));

https://jira.mongodb.org/browse/CSHARP-874

https://github.com/mongodb/mongo-csharp-driver/commit/1e7db3bedb3bee1b0ccecdb5f8ff39854526213a

答案 2 :(得分:0)

在c#中创建索引的最简单方法是使用驱动程序包装器库MongoDB.Entities。这是创建文本索引的示例:

    DB.Index<Author>()
      .Key(a => a.Name, Type.Text)
      .Key(a => a.Surname, Type.Text)
      .Create();

要进行全文搜索,只需执行以下操作:

    DB.SearchText<Author>("search term");

没有比这更简单的了:-)