MongoDB có hỗ trợ full-text search không?
Có, MongoDB hỗ trợ full-text search (tìm kiếm toàn văn bản) rất tốt, là một trong những tính năng nổi bật giúp bạn thực hiện tìm kiếm các chuỗi ký tự trong các document.
Cách MongoDB hỗ trợ full-text search#
MongoDB cung cấp text index để lập chỉ mục cho các trường chứa dữ liệu dạng văn bản.
Khi tạo text index trên một hoặc nhiều trường, bạn có thể sử dụng toán tử
$textđể truy vấn tìm kiếm full-text.MongoDB hỗ trợ tìm kiếm theo từ khóa, tìm kiếm gần đúng (fuzzy search), tìm kiếm cụm từ, kết hợp các từ khóa với các toán tử logic.
Cách tạo text index trong MongoDB#
Ví dụ bạn có collection articles với trường title và content, muốn tạo index để tìm kiếm:
db.articles.createIndex({ title: "text", content: "text" });
Bạn cũng có thể tạo index chỉ trên một trường hoặc trên nhiều trường kết hợp với trọng số khác nhau.
Ví dụ truy vấn full-text search#
Tìm các bài viết chứa từ khóa "MongoDB":
db.articles.find({ $text: { $search: "MongoDB" } });
Các tính năng nâng cao của full-text search MongoDB#
Tìm kiếm theo cụm từ: Sử dụng dấu ngoặc kép
" "để tìm kiếm chính xác cụm từ.Loại trừ từ: Dùng dấu
-trước từ để loại trừ.Tính điểm (score): MongoDB trả về điểm relevance cho từng document, giúp bạn sắp xếp kết quả theo mức độ phù hợp.
Ví dụ lấy điểm và sắp xếp:
db.articles.find( { $text: { $search: "MongoDB" } }, { score: { $meta: "textScore" } } ).sort({ score: { $meta: "textScore" } });
Giới hạn#
Full-text search của MongoDB phù hợp với các ứng dụng tìm kiếm văn bản đơn giản đến trung bình.
Nếu cần tính năng tìm kiếm nâng cao như phân tích ngôn ngữ phức tạp, đề xuất, tìm kiếm fuzzy nhiều cấp, bạn có thể tích hợp MongoDB với Elasticsearch hoặc sử dụng MongoDB Atlas Search (dựa trên Lucene) cho các ứng dụng lớn.