如何使用golang和mgo库在mongodb中创建文本索引?

8
我试图在一个集合上进行全文搜索,但是为了做到这一点,我需要创建一个文本索引(http://docs.mongodb.org/manual/tutorial/create-text-index-on-multiple-fields/)。
mgo库提供了一个EnsureIndex()函数,但它只接受一个字符串切片作为键。我尝试将索引写成字符串:{ name: "text", about: "text" }并将其传递给该函数,但它没有起作用。
我也设法在mongo shell中手动创建索引,但我真的想在我的go项目中记录该索引。这可能吗?提前谢谢!
1个回答

17

这在驱动程序中得到支持。你所需要做的就是将字段定义为 "text" 索引,例如:$text:field

完整清单如下:

import (
  "labix.org/v2/mgo"
)

func main() {

  session, err := mgo.Dial("127.0.0.1")
  if err != nil {
    panic(err)
  }

  defer session.Close()

  session.SetMode(mgo.Monotonic, true)

  c := session.DB("test").C("texty")

  index := mgo.Index{
    Key: []string{"$text:name", "$text:about"},
  }

  err = c.EnsureIndex(index)
  if err != nil {
    panic(err)
  }

}

在mongo shell中查看时,将显示:

> db.texty.getIndices()
[
    {
            "v" : 1,
            "key" : {
                    "_id" : 1
            },
            "name" : "_id_",
            "ns" : "test.texty"
    },
    {
            "v" : 1,
            "key" : {
                    "_fts" : "text",
                    "_ftsx" : 1
            },
            "name" : "name_text_about_text",
            "ns" : "test.texty",
            "weights" : {
                    "about" : 1,
                    "name" : 1
            },
            "default_language" : "english",
            "language_override" : "language",
            "textIndexVersion" : 2
    }
]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接