2014-07-06 16 views
7

Ich versuche, eine Volltextsuche in einer Sammlung zu tun, aber um das zu tun, ich brauche aber einen Textindex (http://docs.mongodb.org/manual/tutorial/create-text-index-on-multiple-fields/)Wie erstelle ich einen Textindex in mongodb mit golang und der mgo-Bibliothek?

Die mgo Bibliothek bietet eine EnsureIndex() Funktion zu erstellen, es nimmt nur eine Scheibe von Strings als Schlüssel. Ich habe versucht, den Index einfach als String auszugeben: { name: "text", about: "text" } und es an diese Funktion übergeben, aber es hat nicht funktioniert.

Ich habe es auch geschafft, den Index in der Mongo-Shell manuell zu erstellen, aber ich würde wirklich gerne den Index in meinem Go-Projekt dokumentiert haben. Ist das möglich? Danke im Voraus!

Antwort

10

Dies wird im Treiber unterstützt. Alles, was Sie tun müssen, ist, Ihre Felder so zu definieren, dass sie als "Text" wie in $text:field indiziert werden.

In einem kompletten Angebot:

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) 
    } 

} 

die, wenn sie von der Mongo Shell betrachtet geben:

> 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 
    } 
] 
Verwandte Themen