Làm cách nào để tìm chuỗi trong MongoDB?
MongoDB, một trong những cơ sở dữ liệu NoSQL hàng đầu, nổi tiếng với tốc độ nhanh, cấu trúc linh hoạt, khả năng mở rộng và khả năng lập chỉ mục tuyệt vời. Trước khi chúng ta đi vào chi tiết vụn vặt, hãy nhìn vào bức tranh lớn hơn. Khi nói đến việc định vị nội dung trên internet, tìm kiếm toàn văn là một chức năng bắt buộc phải có. Khi chúng tôi thấy tài liệu sử dụng các cụm từ hoặc từ khóa, minh họa tốt nhất là tìm kiếm trên Google. Trong bài đăng này, chúng ta sẽ tìm hiểu về khả năng tìm kiếm toàn văn của MongoDB dựa trên các chỉ mục văn bản Show
MongoDB đã ra mắt với một tính năng thử nghiệm cho phép Tìm kiếm Toàn văn thông qua Chỉ mục Văn bản trong phiên bản 2. 4. Tính năng này hiện là một yếu tố thiết yếu của sản phẩm (và không còn là tính năng thử nghiệm nữa). Trong bài đăng này, chúng ta sẽ tìm hiểu các nguyên tắc cơ bản về khả năng tìm kiếm toàn văn của MongoDB Tìm kiếm văn bản - Một tính năng cần thiếtHãy xem xét một tìm kiếm thông thường của Google để hiểu rõ hơn các khái niệm về tìm kiếm toàn văn. Khi chúng tôi sử dụng Google để tìm nội dung, chúng tôi nhập một chuỗi văn bản, chuỗi, cụm từ hoặc từ khóa và một số kết quả được trả về. Tìm kiếm toàn văn bản trong MongoDB cho phép bạn chạy các truy vấn phức tạp tương đương với các truy vấn bạn chạy bằng công cụ tìm kiếm. Bạn có thể tìm kiếm các cụm từ và các biến thể bắt nguồn từ một từ và bạn cũng có thể xóa các cụm từ "phủ định" cụ thể khỏi kết quả tìm kiếm của mình Bạn có thể tạo một chỉ mục văn bản trên bất kỳ trường nào trong tài liệu có giá trị là một chuỗi hoặc một mảng chuỗi bằng tìm kiếm toàn văn MongoDB. Khi chúng tôi xây dựng một chỉ mục văn bản trên một trường, MongoDB mã hóa và tạo nội dung văn bản của trường được lập chỉ mục và tạo các chỉ mục tương ứng Dưới đây là một số trường hợp khác mà chúng ta có thể thấy tìm kiếm toàn văn
Thiết lập cho Tìm kiếmBây giờ chúng ta hãy xem xét một số ví dụ thực tế để giúp chúng ta hiểu mọi thứ tốt hơn. Tôi muốn bạn làm theo cùng với tôi bằng cách chạy các ví dụ trong vỏ mongo. Chúng tôi sẽ bắt đầu bằng cách tạo một số dữ liệu mẫu mà chúng tôi sẽ sử dụng trong suốt hướng dẫn và sau đó chúng tôi sẽ xem xét các ý tưởng chính Để bắt đầu, hãy kết nối với máy chủ MongoDB của bạn. Khi bạn đã cài đặt MongoDB trên hệ thống của mình, bạn có thể sử dụng mongo shell để kết nối với máy chủ MongoDB Chạy lệnh mongo từ dấu nhắc lệnh của bạn để khởi chạy MongoDB shell. Theo mặc định, lệnh mongo sẽ khởi chạy trình bao được liên kết với phiên bản MongoDB được cài đặt cục bộ chạy trên cổng 27017 Chạy lệnh mongo mà không cần thêm bất kỳ tham số nào >mongo Điều này sẽ tạo ra một thông báo chào mừng với thông tin về máy chủ mà trình bao được kết nối, cũng như phiên bản MongoDB được cài đặt Xin chúc mừng, bạn đang ở trong vỏ mongoBây giờ hãy chạy các lệnh sau >use message Hãy sử dụng câu lệnh sau để chèn một số tài liệu db.message.insert({"subject":"Ishan is having a dog", "content":"Dogs are most loyal pet", "likes": 60, "year":2015, "language":"english"}) db.message.insert({"subject":"Dogs eat cats", "content":"Cats are not evil", "likes": 30, "year":2015, "language":"english"}) db.message.insert({"subject":"Cats eat rats", "content":"Rats like cheese", "likes": 55, "year":2014, "language":"english"}) Tạo một chỉ mụcĐể thực hiện tìm kiếm văn bản, trước tiên chúng ta phải thiết lập chỉ mục văn bản trên các trường. Điều này có thể được thực hiện trên một hoặc nhiều lĩnh vực. Câu lệnh bên dưới sẽ tạo chỉ mục văn bản trên một trường duy nhất >db.message.createIndex({"subject":"text"}) Hãy sử dụng câu lệnh sau để chèn một số tài liệu db.message.insert({"subject":"Ishan is having a dog", "content":"Dogs are most loyal pet", "likes": 60, "year":2015, "language":"english"}) db.message.insert({"subject":"Dogs eat cats", "content":"Cats are not evil", "likes": 30, "year":2015, "language":"english"}) db.message.insert({"subject":"Cats eat rats", "content":"Rats like cheese", "likes": 55, "year":2014, "language":"english"}) Tạo một chỉ mụcĐể thực hiện tìm kiếm văn bản, trước tiên chúng ta phải thiết lập chỉ mục văn bản trên các trường. Điều này có thể được thực hiện trên một hoặc nhiều lĩnh vực. Câu lệnh bên dưới sẽ tạo chỉ mục văn bản trên một trường duy nhất >db.message.createIndex({"subject":"text"})Chúng tôi sẽ tạo chỉ mục văn bản dựa trên thuộc tính mô tả và phụ đề. Trong MongoDB, chúng ta chỉ có thể tạo một chỉ mục văn bản cho mỗi bộ sưu tập. Vì vậy, sử dụng dòng sau đây, chúng tôi sẽ thiết lập một chỉ mục văn bản phức hợp. db.messages.createIndex({"subject":"text","content":"text"}) Sử dụng toán tử $textToán tử $text cũng có thể được sử dụng để tìm kiếm một chỉ mục văn bản. Toán tử này được sử dụng để thực hiện các thao tác tìm kiếm văn bản trên bộ sưu tập được lập chỉ mục văn bản. Toán tử này mã hóa từng chuỗi tìm kiếm bằng khoảng trắng và coi hầu hết các dấu chấm câu là dấu phân cách ngoại trừ – và \. " Nó thực hiện thao tác OR logic trên mã thông báo sau khi mã hóa cụm từ tìm kiếm. Sử dụng toán tử truy vấn $meta để sắp xếp các tài liệu đã tạo Syntax: $text: { $search: , $language: , $caseSensitive: , $diacriticSensitive: } trường tìm kiếm $Bây giờ chúng ta sẽ cố gắng tìm các tài liệu có từ khóa 'con chó' trong hộp chủ đề và nội dung. Chúng ta có thể sử dụng câu sau đây để thực hiện điều này Thí dụ > db.message.find({$text: {$search: "dog"}},{ subject: 1, content:1}) This will give the output as: { "_id" : ObjectId("6176ce6de02fd70a168ad9c6"), "subject" : "Ishan is having a dog", "content" : "Dogs are most loyal pet" } { "_id" : ObjectId("6176ce77e02fd70a168ad9c7"), "subject" : "Dogs eat cats", "content" : "Cats are not evil" } Sắp xếp tài liệu dựa trên mức độ liên quan của tìm kiếmĐiểm văn bảnMỗi trang có cụm từ tìm kiếm trong các trường được lập chỉ mục sẽ nhận được điểm từ toán tử $text. Điểm cho biết mức độ liên quan của tài liệu đối với truy vấn tìm kiếm văn bản cụ thể. Điểm số có thể được chỉ định như một phần của định nghĩa phương thức sort() cũng như biểu thức phép chiếu. $meta. Biểu thức "textScore" cung cấp thông tin về quá trình xử lý hoạt động của $text. Để biết thêm thông tin về cách truy xuất điểm cho phép chiếu hoặc sắp xếp, hãy xem toán tử phép chiếu $meta MongoDB Chúng tôi đang thực hiện tìm kiếm văn bản, vì vậy chúng tôi muốn nhận một số thống kê về mức độ phù hợp của các tài liệu kết quả. Để làm điều này, chúng tôi sẽ sử dụng $meta. Biểu thức "textScore", cung cấp thông tin về quá trình xử lý của toán tử $text. Sử dụng lệnh sắp xếp, chúng tôi cũng sẽ sắp xếp tài liệu theo textScore. Một textScore lớn hơn cho thấy một trận đấu tốt hơn >use message0 Truy vấn này trả về các tài liệu sau>use message1Như bạn có thể thấy, tài liệu đầu tiên được điểm 1. 2916666666666665 (vì từ khóa con chó xuất hiện hai lần trong chủ đề của nó), trong khi từ khóa thứ hai có số điểm là 1. Truy vấn cũng sắp xếp các tài liệu được trả về theo điểm số của chúng theo thứ tự giảm dần. Lập chỉ mục hợp chấtChúng tôi sẽ cho phép lập chỉ mục văn bản phức hợp trên các trường chủ đề và nội dung trong ví dụ của chúng tôi. Tiến hành chạy lệnh sau trong vỏ mongo db.messages.createIndex({"subject":"text","content":"text"})Lệnh này sẽ không hoạt động. Cố gắng tạo chỉ mục văn bản thứ hai sẽ dẫn đến thông báo lỗi cho biết đã tồn tại chỉ mục tìm kiếm toàn văn bản. Tại sao điều này là trường hợp? . Do đó, muốn lập mục lục văn bản khác thì phải xóa mục lục cũ và lập mục lục mới. >use message3 Sau khi chạy các truy vấn tạo chỉ mục được liệt kê ở trên, hãy thử tìm kiếm tất cả các trang bằng từ khóa cat >use message4 Truy vấn trên sẽ cho đầu ra sau >use message5 Lập chỉ mục toàn bộ tài liệuTrong ví dụ trước, chúng tôi đã tạo một chỉ mục tổng hợp trên các trường chủ đề và nội dung. Tuy nhiên, có thể đôi khi bạn muốn bất kỳ nội dung văn bản nào trong bài báo của mình đều có thể tìm kiếm được Ví dụ, xem xét lưu trữ email trong tài liệu MongoDB. Trong trường hợp email, tất cả các trường phải có thể tìm kiếm được, bao gồm Người gửi, Người nhận, Chủ đề và Nội dung. Trong những trường hợp như vậy, bạn có thể sử dụng trình xác định ký tự đại diện $** để lập chỉ mục tất cả các trường chuỗi của tài liệu của bạn Truy vấn sẽ như sau (đảm bảo bạn xóa chỉ mục hiện có trước khi thiết lập chỉ mục mới) >use message6 Truy vấn này sẽ tạo các chỉ mục văn bản trên bất kỳ trường chuỗi nào trong tài liệu của chúng tôi Thực hiện tìm kiếm văn bản trong một quy trình tổng hợpTìm kiếm văn bản được hỗ trợ trong quy trình tổng hợp thông qua toán tử truy vấn $text trong giai đoạn $match. Tuy nhiên, các quy định sau áp dụng cho tìm kiếm văn bản trong đường dẫn tổng hợp
Toán tử $text gán điểm văn bản cho từng tài liệu chứa từ tìm kiếm trong trường chỉ mục. Điểm cho thấy tầm quan trọng của tài liệu liên quan đến truy vấn tìm kiếm văn bản nhất định ví dụ. Các ví dụ sau dựa trên tuyển tập thư có chỉ mục văn bản trên chủ đề trường >use message7 Đếm số lượng tài liệu trong đó giá trị thú cưng là con chó>use message8 Đếm số lượng tài liệu có giá trị vật nuôi là Cat>use message8 Tóm lượcNếu bạn xử lý nội dung chuỗi trong MongoDB, bạn nên sử dụng tìm kiếm toàn văn để tìm kiếm hiệu quả và chính xác hơn. Trong bài viết này, chúng tôi đã trình bày cách tiến hành tìm kiếm toàn văn cơ bản trên tập dữ liệu mẫu. Tìm kiếm toàn văn bản luôn là một trong những khả năng được yêu cầu nhiều nhất của MongoDB. Bài viết này bắt đầu với phần giới thiệu về tìm kiếm toàn văn bản trước khi chuyển sang các nguyên tắc cơ bản của việc tạo chỉ mục văn bản. Sau đó, chúng tôi đã xem xét lập chỉ mục phức hợp, lập chỉ mục ký tự đại diện. Chúng tôi cũng đã xem xét một số khái niệm chính bao gồm phân tích chỉ mục văn bản và tìm kiếm văn bản trong quy trình tổng hợp. Trong các phiên bản MongoDB sắp tới, chúng ta có thể mong đợi một số cải tiến đáng kể cho khả năng này Làm cách nào để tìm kiếm một phần văn bản trong MongoDB?Trong MongoDB, chúng ta có thể tìm kiếm văn bản bằng cách sử dụng toán tử truy vấn $text và toán tử này được sử dụng để thực hiện tìm kiếm văn bản trên một bộ sưu tập với . Nó 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 trên nội dung chuỗi.
Chuỗi trong MongoDB là gì?Chuỗi kết nối MongoDB được định nghĩa là định dạng kết nối để tham gia máy chủ cơ sở dữ liệu MongoDB , chúng tôi sử dụng tên người dùng, tên máy chủ, mật khẩu và tham số cổng . Không có chuỗi kết nối thì không kết nối được với máy chủ cơ sở dữ liệu, chúng ta cần có chuỗi kết nối để kết nối máy chủ cơ sở dữ liệu.
Làm cách nào để tìm dữ liệu trong MongoDB?Để chọn dữ liệu từ một bảng trong MongoDB, chúng ta cũng có thể sử dụng phương thức find() . Phương thức find() trả về tất cả các lần xuất hiện trong vùng chọn. Tham số đầu tiên của phương thức find() là một đối tượng truy vấn. Trong ví dụ này, chúng tôi sử dụng một đối tượng truy vấn trống để chọn tất cả các tài liệu trong bộ sưu tập.
Làm cách nào để lọc chuỗi trong MongoDB?Bằng cách kết hợp việc sử dụng hàm LIKE với các ký tự đại diện , chúng ta có thể tìm thấy tất cả các giá trị bắt đầu, kết thúc hoặc chứa một chuỗi tại một vị trí nhất định. Các nhà phát triển đã từng làm việc với SQL Server rất quen thuộc với ký tự đại diện % đại diện cho 0 hoặc bất kỳ số lượng ký tự nào. Bạn có được ý tưởng. |