2014-07-06 12 views
7

Tôi đang cố gắng để thực hiện tìm kiếm văn bản đầy đủ về một bộ sưu tập, nhưng để làm được điều đó tôi cần phải tạo ra một chỉ mục văn bản (http://docs.mongodb.org/manual/tutorial/create-text-index-on-multiple-fields/)Làm cách nào để tạo chỉ mục văn bản trong mongodb với golang và thư viện mgo?

Thư viện mgo cung cấp một chức năng EnsureIndex() tuy nhiên, nó chỉ chấp nhận một lát của chuỗi như là một chìa khóa. Tôi đã thử viết chỉ mục ra dưới dạng chuỗi: { name: "text", about: "text" } và chuyển chỉ mục đó tới hàm đó nhưng không hoạt động.

Tôi cũng đã quản lý để tạo chỉ mục theo cách thủ công trong trình bao mongo nhưng tôi thực sự muốn có chỉ mục được ghi lại trong dự án đi của tôi. Điều này có thể không? Cảm ơn trước!

Trả lời

10

Điều này được hỗ trợ trong trình điều khiển. Tất cả những gì bạn cần làm là xác định các trường của bạn sẽ được lập chỉ mục là "văn bản" như trong $text:field.

Trong một danh sách đầy đủ:

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

} 

nào khi nhìn từ vỏ Mongo sẽ cung cấp cho:

> 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 
    } 
] 
Các vấn đề liên quan