2014-07-06 13 views
7

ben bir metin dizini oluşturmak için gereken bunu amacıyla bir koleksiyon üzerinde tam metin araması yapmaya çalışıyor, ama değilim (http://docs.mongodb.org/manual/tutorial/create-text-index-on-multiple-fields/)Golang ve mgo kütüphanesi ile mongodb'de nasıl bir metin dizini oluşturabilirim?

mgo kütüphane sadece bir dilim kabul eder ancak bir EnsureIndex() fonksiyonu sağlar bir anahtar olarak dizeleri. Dizinini { name: "text", about: "text" } dizesi olarak yazmayı ve bu işleve iletmeyi denedim ancak çalışmadı.

Ayrıca, mongo kabuğundaki dizini el ile oluşturmayı da başardım, ancak dizimin projemde belgelenmesini gerçekten istiyorum. Mümkün mü? Şimdiden teşekkürler!

cevap

10

Bu, sürücüde desteklenir. Yapmanız gereken tek şey alanlarınızı $text:field'daki gibi "metin" olarak endekslenecek şekilde tanımlamaktır. Listenin tamamı ise

: Mongo kabuk bakıldığında

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

} 

verecektir:

> 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 
    } 
] 
İlgili konular