2014-07-06 11 views
7

Próbuję zrobić wyszukiwanie pełnotekstowe w kolekcji, ale w tym celu trzeba utworzyć indeks tekstowy (http://docs.mongodb.org/manual/tutorial/create-text-index-on-multiple-fields/)Jak utworzyć indeksu tekstowego w mongodb z golang i biblioteki mgo?

Biblioteka MgO zapewnia funkcję EnsureIndex() jednak, że akceptuje tylko kawałek strun jako klucz. Próbowałem po prostu wypisać indeks jako ciąg: { name: "text", about: "text" } i przekazać go do tej funkcji, ale to nie zadziałało.

Udało mi się też ręcznie utworzyć indeks w powłoce Mongo, ale bardzo chciałbym, aby indeks został udokumentowany w moim projekcie. czy to możliwe? Z góry dziękuję!

Odpowiedz

10

Jest to obsługiwane w sterowniku. Wszystko, co musisz zrobić, to zdefiniować swoje pola do indeksowania jako "tekst", tak jak w $text:field.

W Pełną listę:

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

} 

Które gdy patrzy się od powłoki Mongo da:

> 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 
    } 
] 
Powiązane problemy