MongoDB - Tìm kiếm văn bản
Bắt đầu từ phiên bản 2.4, MongoDB bắt đầu hỗ trợ các chỉ mục văn bản để tìm kiếm bên trong nội dung chuỗi. CácText Search sử dụng kỹ thuật cắt gốc để tìm kiếm các từ được chỉ định trong các trường chuỗi bằng cách bỏ các từ dừng gốc như a, an, the, vv Hiện tại, MongoDB hỗ trợ khoảng 15 ngôn ngữ.
Bật tìm kiếm văn bản
Ban đầu, Tìm kiếm văn bản là một tính năng thử nghiệm nhưng bắt đầu từ phiên bản 2.6, cấu hình được bật theo mặc định.
Tạo chỉ mục văn bản
Hãy xem xét tài liệu sau dưới posts bộ sưu tập chứa văn bản bài đăng và các thẻ của nó -
> db.posts.insert({
"post_text": "enjoy the mongodb articles on tutorialspoint",
"tags": ["mongodb", "tutorialspoint"]
}
{
"post_text" : "writing tutorials on mongodb",
"tags" : [ "mongodb", "tutorial" ]
})
WriteResult({ "nInserted" : 1 })
Chúng tôi sẽ tạo một chỉ mục văn bản trên trường post_text để chúng tôi có thể tìm kiếm bên trong văn bản bài đăng của mình -
>db.posts.createIndex({post_text:"text"})
{
"createdCollectionAutomatically" : true,
"numIndexesBefore" : 1,
"numIndexesAfter" : 2,
"ok" : 1
}
Sử dụng Chỉ mục Văn bản
Bây giờ chúng tôi đã tạo chỉ mục văn bản trên trường post_text, chúng tôi sẽ tìm kiếm tất cả các bài đăng có từ tutorialspoint trong văn bản của họ.
> db.posts.find({$text:{$search:"tutorialspoint"}}).pretty()
{
"_id" : ObjectId("5dd7ce28f1dd4583e7103fe0"),
"post_text" : "enjoy the mongodb articles on tutorialspoint",
"tags" : [
"mongodb",
"tutorialspoint"
]
}
Lệnh trên trả về các tài liệu kết quả sau có từ tutorialspoint trong văn bản bài đăng của họ -
{
"_id" : ObjectId("53493d14d852429c10000002"),
"post_text" : "enjoy the mongodb articles on tutorialspoint",
"tags" : [ "mongodb", "tutorialspoint" ]
}
Xóa chỉ mục văn bản
Để xóa một chỉ mục văn bản hiện có, trước tiên hãy tìm tên của chỉ mục bằng cách sử dụng truy vấn sau:
>db.posts.getIndexes()
[
{
"v" : 2,
"key" : {
"_id" : 1
},
"name" : "_id_",
"ns" : "mydb.posts"
},
{
"v" : 2,
"key" : {
"fts" : "text",
"ftsx" : 1
},
"name" : "post_text_text",
"ns" : "mydb.posts",
"weights" : {
"post_text" : 1
},
"default_language" : "english",
"language_override" : "language",
"textIndexVersion" : 3
}
]
>
Sau khi nhận được tên chỉ mục của bạn từ truy vấn trên, hãy chạy lệnh sau. Đây,post_text_text là tên của chỉ mục.
>db.posts.dropIndex("post_text_text")
{ "nIndexesWas" : 2, "ok" : 1 }