MongoDB là một cơ sở dữ liệu NoSQL dựa trên tài liệu. Vì dữ liệu được lưu trữ ở định dạng của tài liệu nên nó có thể chứa một lượng dữ liệu khổng lồ và vì đây là loại cơ sở dữ liệu NoSQL nên không cần thiết phải có các mối quan hệ toàn vẹn tham chiếu. Vì vậy, tìm kiếm là một tiêu chí quan trọng ở đây và MongoDB cung cấp các chỉ mục Văn bản để hỗ trợ các truy vấn tìm kiếm văn bản, đặc biệt là trên nội dung chuỗi. Chỉ mục văn bản phải là một chuỗi hoặc một mảng các phần tử chuỗi Show
Làm cách nào để tạo mục lục văn bản?Trong MongoDB, chúng ta có thể tạo các chỉ mục văn bản bằng cách sử dụng db. tên bộ sưu tập. phương thức tạo Index(). Vì vậy, để lập chỉ mục một trường chứa chuỗi hoặc một mảng các phần tử chuỗi, hãy chuyển một tài liệu trong phương thức createIndex() chứa trường và chuỗi ký tự (i. e. , "chữ"). Sử dụng phương pháp này, bạn được phép lập chỉ mục nhiều trường cho mục lục văn bản. Ngoài ra, một chỉ mục phức hợp có thể chứa khóa chỉ mục văn bản kết hợp với khóa chỉ mục tăng dần và giảm dần. Và nếu bạn muốn bỏ chỉ mục văn bản, chỉ cần sử dụng tên chỉ mục cú pháp
Thí dụ
Bây giờ, chúng ta hãy tạo một chỉ mục văn bản trên trường “title” của bộ sưu tập “studentsposts” để tìm kiếm bên trong bộ sưu tập db.studentsposts.createIndex({title: "text"}) Bây giờ chúng ta sẽ xem cách tìm kiếm bằng Text Index db.studentsposts.find({$text:{$search: "mongodb"}}).pretty() Đầu ra là tự giải thích ở trên vì chúng tôi đã tạo chỉ mục trên trường “tiêu đề” và chúng tôi đã cố gắng tìm kiếm văn bản “mongodb”. Nó hiện diện trong cả hai tài liệu trong trường "tiêu đề". Do đó, kết quả là 2 tài liệu ở đây thả chỉ mụcĐôi khi cũng có thể cần phải xóa các chỉ mục văn bản vì nó được tạo sai hoặc cần sửa đổi theo một cách khác hoặc hoàn toàn muốn xóa nó. Vì vậy, sử dụng db. thu thập. dropIndex() chúng ta có thể xóa chỉ mục văn bản. Phương thức này xóa chỉ mục đã chỉ định khỏi bộ sưu tập đã cho cú pháp db.collection.dropIndex("TextIndex") Thí dụ Đầu tiên, chúng ta tìm chỉ mục của trường db.studentsposts.getIndexes() Bây giờ chúng tôi xóa chỉ mục văn bản bằng phương thức dropIndex() db.studentsposts.dropIndex("title_text") Chỉ định trọng lượngĐối với chỉ mục văn bản, trọng số của trường được lập chỉ mục là tầm quan trọng của trường. Trong MongoDB, đối với mỗi trường chỉ mục trong tài liệu, MongoDB tính tổng kết quả bằng cách nhân số lượng kết quả khớp với trọng số. Bây giờ sử dụng tổng này, MongoDB tính điểm cho tài liệu. Trọng số mặc định của trường chỉ mục là 1 và bạn có thể điều chỉnh trọng số của chỉ mục bằng phương thức createIndex() Thí dụ db.studentsposts.createIndex({title:"text", tags:"text"}, {weights:{title:10, tags:5}, name:"TextIndex"}) Ở đây, trọng số của trường tiêu đề và thẻ là 10 và 5 chỉ mục ký tự đại diệnSử dụng trình xác định ký tự đại diện ($**), bạn được phép tạo nhiều trường chỉ mục văn bản. Do chỉ mục văn bản ký tự đại diện MongoDB lập chỉ mục cho từng trường chứa dữ liệu chuỗi trong tất cả các tài liệu có trong bộ sưu tập đã cho. Chỉ mục văn bản ký tự đại diện hữu ích cho dữ liệu phi cấu trúc khi chúng tôi không biết trường nào chứa dữ liệu chuỗi hoặc cho truy vấn đặc biệt. Nó cho phép tìm kiếm văn bản trên tất cả các trường chứa dữ liệu chuỗi. Chỉ mục văn bản hoang dã có thể là một phần của chỉ mục ghép Có nhiều loại chỉ mục khác nhau mà bạn có thể tạo trong MongoDB. Nếu bạn có một trường chứa một chuỗi hoặc một mảng các chuỗi, bạn có thể sử dụng chỉ mục 5 trên trường đóĐể tạo chỉ mục 5, hãy sử dụng chuỗi ký tự 7 làm giá trị khi tạo chỉ mụcTạo một chỉ mục văn bản trên một trường duy nhấtGiả sử chúng ta có một bộ sưu tập có tên là 8 và nó chứa các tài liệu như thế này{ "_id" : 1, "title" : "The Web", "body" : "Body text...", "abstract" : "Abstract text..." } Chúng tôi có thể muốn tạo một chỉ mục 5 trên trường { "createdCollectionAutomatically" : false, "numIndexesBefore" : 1, "numIndexesAfter" : 2, "ok" : 1 }0 hoặc trường { "createdCollectionAutomatically" : false, "numIndexesBefore" : 1, "numIndexesAfter" : 2, "ok" : 1 }1 hoặc thậm chí cả hai Dưới đây là cách tạo chỉ mục 5 trên trường { "createdCollectionAutomatically" : false, "numIndexesBefore" : 1, "numIndexesAfter" : 2, "ok" : 1 }0
đầu ra { "createdCollectionAutomatically" : false, "numIndexesBefore" : 1, "numIndexesAfter" : 2, "ok" : 1 } Bây giờ chúng ta có thể sử dụng phương pháp { "createdCollectionAutomatically" : false, "numIndexesBefore" : 1, "numIndexesAfter" : 2, "ok" : 1 }4 để xem chỉ mục
Kết quả [ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" }, { "v" : 2, "key" : { "_fts" : "text", "_ftsx" : 1 }, "name" : "body_text", "weights" : { "body" : 1 }, "default_language" : "english", "language_override" : "language", "textIndexVersion" : 3 } ] Chúng ta có thể thấy rằng có hai chỉ số. Cái đầu tiên là chỉ mục { "createdCollectionAutomatically" : false, "numIndexesBefore" : 1, "numIndexesAfter" : 2, "ok" : 1 }5 mặc định được tạo tự động với bộ sưu tập. Chỉ mục thứ hai là chỉ mục chúng ta vừa tạo MongoDB đã tự động gán tên cho chỉ mục mới được tạo của chúng tôi. Nó được gọi là { "createdCollectionAutomatically" : false, "numIndexesBefore" : 1, "numIndexesAfter" : 2, "ok" : 1 }6 Tạo một chỉ mục văn bản hợp chấtMột bộ sưu tập chỉ có thể có một chỉ mục 5, nhưng nó có thể là chỉ mục tổng hợp nếu được yêu cầuHãy tạo một chỉ mục phức hợp bao gồm trường { "createdCollectionAutomatically" : false, "numIndexesBefore" : 1, "numIndexesAfter" : 2, "ok" : 1 }0 và trường { "createdCollectionAutomatically" : false, "numIndexesBefore" : 1, "numIndexesAfter" : 2, "ok" : 1 }1 Như đã đề cập, một bộ sưu tập chỉ có thể có một chỉ mục 5, vì vậy hãy bỏ chỉ mục mà chúng ta vừa tạo
đầu ra { "nIndexesWas" : 2, "ok" : 1 } OK, bây giờ chúng ta đã loại bỏ chỉ mục 5, hãy tiếp tục và tạo một chỉ mục khác – lần này nó sẽ là một chỉ mục tổng hợp
đầu ra { "createdCollectionAutomatically" : false, "numIndexesBefore" : 1, "numIndexesAfter" : 2, "ok" : 1 } Đó là thông báo xác nhận cho chúng tôi biết rằng đã từng có 1 chỉ mục nhưng hiện tại có 2 chỉ mục Hãy kiểm tra lại danh sách các chỉ mục
Kết quả 0Lưu ý rằng các chỉ số hợp chất 5 có các hạn chế sau
Tạo chỉ mục văn bản ký tự đại diệnBạn có thể tạo chỉ mục văn bản ký tự đại diện bằng cách sử dụng mẫu trường ký tự đại diện 9Hãy bỏ chỉ mục trước đó và tạo chỉ mục văn bản ký tự đại diện 1MongoDB cũng cung cấp cho chúng ta khả năng tạo các chỉ mục ký tự đại diện, tuy nhiên chỉ mục văn bản ký tự đại diện và chỉ mục ký tự đại diện là hai thứ khác biệt Cụ thể, chỉ mục văn bản ký tự đại diện hỗ trợ toán tử 6, trong khi chỉ mục ký tự đại diện thì khôngThông số [ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" }, { "v" : 2, "key" : { "_fts" : "text", "_ftsx" : 1 }, "name" : "body_text", "weights" : { "body" : 1 }, "default_language" : "english", "language_override" : "language", "textIndexVersion" : 3 } ]1Khi tạo 5 chỉ mục, bạn có tùy chọn chỉ định trọng số trên một hoặc nhiều trường. Theo mặc định, mỗi trường được gán trọng số là 1. Nhưng bạn có thể thay đổi điều này để tăng hoặc giảm trọng số cho các trường trong kết quả tìm kiếmThí dụ 2Tôi đã bắt đầu bằng cách bỏ chỉ mục trước đó Khi tôi tạo chỉ mục 5 mới, tôi đã chỉ định 3 trường. Khi tôi chỉ định trọng số, tôi đã chỉ định trọng số cho chỉ hai trong số các trường đóKết quả là hai trường đó sẽ có trọng số như đã chỉ định và trường còn lại ( [ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" }, { "v" : 2, "key" : { "_fts" : "text", "_ftsx" : 1 }, "name" : "body_text", "weights" : { "body" : 1 }, "default_language" : "english", "language_override" : "language", "textIndexVersion" : 3 } ]4) sẽ có trọng số mặc định là 1 Chúng ta có thể thấy điều này khi chúng ta chạy lại [ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" }, { "v" : 2, "key" : { "_fts" : "text", "_ftsx" : 1 }, "name" : "body_text", "weights" : { "body" : 1 }, "default_language" : "english", "language_override" : "language", "textIndexVersion" : 3 } ]5
Kết quả 4Điều này có nghĩa là trường { "createdCollectionAutomatically" : false, "numIndexesBefore" : 1, "numIndexesAfter" : 2, "ok" : 1 }0 sẽ có ý nghĩa gấp đôi trường { "createdCollectionAutomatically" : false, "numIndexesBefore" : 1, "numIndexesAfter" : 2, "ok" : 1 }1 và gấp mười lần ý nghĩa của trường [ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" }, { "v" : 2, "key" : { "_fts" : "text", "_ftsx" : 1 }, "name" : "body_text", "weights" : { "body" : 1 }, "default_language" : "english", "language_override" : "language", "textIndexVersion" : 3 } ]4 Tạo nhiều chỉ mục văn bản ngôn ngữBạn sẽ nhận thấy rằng chỉ số 5 ở trên bao gồm 0 và 1 trong định nghĩa của nóCác trường này hỗ trợ xử lý tài liệu bằng nhiều ngôn ngữ. Các giá trị trong chỉ mục trên là các giá trị mặc định Khi bạn tạo một tài liệu, bạn có thể chỉ định ngôn ngữ của tài liệu đó bằng cách sử dụng trường 2 (hoặc một số trường khác được xác định trong trường 3 của chỉ mục 5). Nếu trường đó không tồn tại trong tài liệu thì nó sẽ sử dụng ngôn ngữ mặc định được chỉ định trong trường 5Bạn có thể chỉ định 5 (và 3) khi tạo chỉ mụcXem Tạo chỉ mục văn bản đa ngôn ngữ trong MongoDB để biết ví dụ về cách tạo chỉ mục văn bản hỗ trợ nhiều ngôn ngữ Có thể lập chỉ mục trong MongoDB không?MongoDB sử dụng chỉ mục đa khóa để lập chỉ mục nội dung được lưu trữ trong mảng . Nếu bạn lập chỉ mục cho một trường chứa giá trị mảng, MongoDB sẽ tạo các mục nhập chỉ mục riêng cho mọi phần tử của mảng. Các chỉ mục đa khóa này cho phép các truy vấn chọn tài liệu có chứa mảng bằng cách so khớp trên phần tử hoặc các phần tử của mảng.
Làm cách nào để tạo chỉ mục văn bản trong MongoDB Compass?Để tạo chỉ mục trên bộ sưu tập qua Compass, bộ sưu tập phải chứa tài liệu. . Nhấp vào nút Tạo chỉ mục. Từ tab Chỉ mục, nhấp vào nút Tạo Chỉ mục để hiển thị hộp thoại Tạo Chỉ mục Không bắt buộc. Nhập tên chỉ mục. . Thêm trường vào chỉ mục. Chỉ định một khóa chỉ mục Làm cách nào để sử dụng tìm kiếm văn bản trong MongoDB?Sử dụng toán tử truy vấn $text để thực hiện tìm kiếm văn bản trên bộ sưu tập có chỉ mục văn bản . $text sẽ mã hóa chuỗi tìm kiếm bằng cách sử dụng khoảng trắng và hầu hết các dấu chấm câu làm dấu phân cách và thực hiện OR logic của tất cả các mã thông báo như vậy trong chuỗi tìm kiếm.
Làm cách nào để tạo chỉ mục văn bản trong MongoDB Nodejs?Theo mặc định, MongoDB tạo một chỉ mục duy nhất trên trường _id trong quá trình tạo bộ sưu tập. Để tạo một chỉ mục duy nhất, chỉ định trường hoặc tổ hợp các trường mà bạn muốn ngăn trùng lặp và đặt tùy chọn duy nhất thành true . |