2014-06-17 17 views
10

Tôi đang cố gắng tìm kiếm toàn bộ mongodb với nhiều trường hoạt động. tôi đã thiết lập các chỉ số trên 3 lĩnh vực-tên, mô tả, thể loại, và xác minh vớiTìm kiếm văn bản mongodb với nhiều trường

document.collection.getIndexes(), mà returns-

[ 
    { 
     "v" : 1, 
     "key" : { 
      "_id" : 1 
     }, 
     "name" : "_id_", 
     "ns" : "document.collection" 
    }, 
    { 
     "v" : 1, 
     "key" : { 
      "name" : 2, 
      "description" : 1, 
      "category" : 1 
     }, 
     "name" : "name_2_description_1_category_1", 
     "ns" : "document.collection", 
     "background" : true, 
     "safe" : null 
    } 
] 

Bây giờ, nếu tôi cố gắng thực hiện một tìm kiếm văn bản, sử dụng follwing Command-

db.collection.find( {$text:{$search:'alias'}} ).limit(10) 

nhận được thông báo lỗi sau:

error: { 
    "$err" : "Unable to execute query: error processing query: ns=document.collection limit=10 skip=0\nTree: TEXT : query=alias, language=, tag=NULL\nSort: {}\nProj: {}\n planner returned error: need exactly one text index for $text query", 
    "code" : 17007 
} 

Tôi đã thử google và mongodb tài liệu nhưng tôi không thể tìm thấy bất cứ điều gì.

+1

Đó không phải là chỉ mục văn bản. Tên sẽ có "văn bản" sau mỗi tên trường và các chỉ báo khác. –

Trả lời

16

Bạn nên tạo một text index trên các lĩnh vực bạn muốn tìm kiếm:

db.deals.ensureIndex({ name: "text", description : "text", category : "text" }); 

Từ các tài liệu của $text điều hành:

$ text thực hiện tìm kiếm văn bản về nội dung của các lĩnh vực được lập chỉ mục với chỉ mục văn bản.

Chỉ mục bạn đã tạo cho ba trường của bạn là chỉ mục tổng hợp, không phải chỉ mục văn bản. Chỉ mục văn bản sẽ trông giống như sau:

{ 
    "v" : 1, 
    "key" : { 
     "_fts" : "text", 
     "_ftsx" : 1 
    }, 
    "name" : "name_text_description_text_category_text", 
    "ns" : "test.deals", 
    "weights" : { 
     "category" : 1, 
     "description" : 1, 
     "name" : 1 
    }, 
    "default_language" : "english", 
    "language_override" : "language", 
    "textIndexVersion" : 2 
} 
+0

Tôi đã có: 'db.deals.ensureIndex ({name:" text "}, {description:" text "}, {category:" text "})' –

+0

@MukeshSoni - xem cập nhật của tôi –

+0

Cảm ơn, @Christian , bạn có thể cho tôi biết làm thế nào để đảm bảoIndex trong mongoose? Tôi đã sử dụng dòng này để tạo chỉ mục: 'Schema.index ({tên: 2, mô tả: 1, danh mục: 1}); ' –

Các vấn đề liên quan