2014-07-06 16 views
7

che sto cercando di fare una ricerca full text su una collezione, ma per farlo ho bisogno di creare un indice di testo (http://docs.mongodb.org/manual/tutorial/create-text-index-on-multiple-fields/)Come posso creare un indice di testo in mongodb con golang e la libreria mgo?

La biblioteca mgo fornisce una funzione EnsureIndex() tuttavia, accetta solo una fetta di stringhe come chiave. Ho provato a scrivere l'indice come stringa: { name: "text", about: "text" } e passarlo a quella funzione ma non ha funzionato.

Sono anche riuscito a creare manualmente l'indice nella shell mongo ma mi piacerebbe molto che l'indice fosse documentato nel mio progetto go. È possibile? Grazie in anticipo!

risposta

10

Questo è supportato nel driver. Tutto quello che devi fare è definire i tuoi campi da indicizzare come "testo" come in $text:field.

In un elenco completo:

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

} 

Quali visto dalla shell mongo darà:

> 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 
    } 
] 
Problemi correlati