Đầu tiên chúng ta thống nhất với nhau là hiểu khái niệm Full text search là gì? này trước rồi mới tới việc thực hành. Full text search đơn giản chỉ là một hình thức nâng cao việc tìm kiếm dữ liệu trong database mà thôi.Full text search là gì? này trước
rồi mới tới việc thực hành. Full text search đơn giản chỉ là một hình thức nâng cao việc tìm kiếm dữ liệu trong database mà thôi.
Một người bình thường họ có thể mất nhiều steps để tìm ra một chuỗi cần thiết thì dẫn đến việc lâu và chậm, dẫn đến chản nản..., nếu người đó biết được khái niệm và thực hành về Fulltext search thì việc đó trở nên đơn giản hơn bao giờ hết. Và bài viết này tôi sẽ hướng dẫn về điều đó với Mongodb.
Full text search Mongodb
Đương nhiên để hiểu về Full text search in mongodb thì trước tiên điều kiện tiên quyết là bạn đã cài đặt và sử dụng mongodb rồi. Nếu bạn chưa biết thì có thể theo những hướng dẫn trong blogs này đã viết or có thể vào trang chủ của mongodbFull text search in mongodb thì trước tiên điều kiện tiên quyết là bạn đã cài đặt và sử dụng mongodb rồi. Nếu bạn chưa biết thì có thể theo những hướng dẫn trong blogs này đã viết or có thể vào trang chủ của mongodb
Cách cài đặt và tạo user quản lý database với mongodb
Cách kết nối mongodb với nodejs tốt nhất
Ok, xem như xong chúng ta sẽ đi tới thực hành. Đầu tiên giả sử bạn đã xong xuôi mọi chuyện và bạn sẽ insert data vào trong DB:
> use test
switched to db test
> db.players.insertMany([
... {"name": "cr7", "description": "ghi ban bang hai chan va bang dau"},
... {"name": "m10", "description": "ghi ban chan trai va chan phai"},
... {"name": "Haaland", "description": "ghi ban chan trai"},
... {"name": "M3p", "description": "ghi ban chan phai"},
... {"name": "greenwood", "description": "ghi ban bang dau"}
... ])
Trên đó là tôi insert một số cầu thủ đang hot với 2 khai báo:
> db.players.find()
{ "_id" : ObjectId("61e8def4cfc05da9225c6250"), "name" : "cr7", "description" : "ghi ban bang hai chan va bang dau" }
{ "_id" : ObjectId("61e8def4cfc05da9225c6251"), "name" : "m10", "description" : "ghi ban chan trai va chan phai" }
{ "_id" : ObjectId("61e8def4cfc05da9225c6252"), "name" : "Haaland", "description" : "ghi ban chan trai" }
{ "_id" : ObjectId("61e8def4cfc05da9225c6253"), "name" : "M3p", "description" : "ghi ban chan phai" }
{ "_id" : ObjectId("61e8def4cfc05da9225c6254"), "name" : "greenwood", "description" : "ghi ban bang dau" }
>
0. Tôi nói nhanh thôi, nên không đi sâu vào chi tiết.
> db.players.find()
{ "_id" : ObjectId("61e8def4cfc05da9225c6250"), "name" : "cr7", "description" : "ghi ban bang hai chan va bang dau" }
{ "_id" : ObjectId("61e8def4cfc05da9225c6251"), "name" : "m10", "description" : "ghi ban chan trai va chan phai" }
{ "_id" : ObjectId("61e8def4cfc05da9225c6252"), "name" : "Haaland", "description" : "ghi ban chan trai" }
{ "_id" : ObjectId("61e8def4cfc05da9225c6253"), "name" : "M3p", "description" : "ghi ban chan phai" }
{ "_id" : ObjectId("61e8def4cfc05da9225c6254"), "name" : "greenwood", "description" : "ghi ban bang dau" }
>
OK tìm kiếm xong, như vậy là insert thành công. Tiếp đến sử dụng Full text search bằng cách sử dụng
> db.players.find()
{ "_id" : ObjectId("61e8def4cfc05da9225c6250"), "name" : "cr7", "description" : "ghi ban bang hai chan va bang dau" }
{ "_id" : ObjectId("61e8def4cfc05da9225c6251"), "name" : "m10", "description" : "ghi ban chan trai va chan phai" }
{ "_id" : ObjectId("61e8def4cfc05da9225c6252"), "name" : "Haaland", "description" : "ghi ban chan trai" }
{ "_id" : ObjectId("61e8def4cfc05da9225c6253"), "name" : "M3p", "description" : "ghi ban chan phai" }
{ "_id" : ObjectId("61e8def4cfc05da9225c6254"), "name" : "greenwood", "description" : "ghi ban bang dau" }
>
1. Trước tiên khai báo index, nếu không bạn sẽ bị text index required for $text query như thế này:text index required for $text query như thế này:
> db.players.find({ $text:{ $search: '\"chan va bang dau\"'} })
{ "_id" : ObjectId("61e8def4cfc05da9225c6250"), "name" : "cr7", "description" : "ghi ban bang hai chan va bang dau" }
>
Tiếp theo chúng ta chỉ tìm những cầu thủ chi ghi bàn bằng đầu thôi. Tìm kiếm như sau
> db.players.find({ $text:{ $search: 'bang dau'} })
{ "_id" : ObjectId("61e8def4cfc05da9225c6250"), "name" : "cr7", "description" : "ghi ban bang hai chan va bang dau" }
{ "_id" : ObjectId("61e8def4cfc05da9225c6254"), "name" : "greenwood", "description" : "ghi ban bang dau" }
>
Chúng ta nhận thấy mục đích chúng ta bị sai bởi vì muốn tìm cầu thủ chỉ ghi bằng đầu thôi mà có một document ghi bằng chân nữa. Chúng ta sẽ thay lại như sau:
> db.players.find({ $text:{ $search: 'bang dau -chan'} })
{ "_id" : ObjectId("61e8def4cfc05da9225c6254"), "name" : "greenwood", "description" : "ghi ban bang dau" }
>
Có một câu hỏi có nhiều bạn cũng thắc mắc về sử dụng Text search trong MongoDB về tìm kiếm có dấu ở VN. Thì cơ bản nó cung giống chung nhau cả thôi. Chủ yếu là khi các bạn insert data như thế nào? Các bạn phải chuyển về mẫu số chung như "Giàu", "giaU" thì cũng bằng
8 mà thôi.Text search trong MongoDB về tìm kiếm có dấu ở VN. Thì cơ bản nó cung giống chung nhau cả thôi. Chủ yếu là khi các bạn insert data như thế nào? Các bạn phải chuyển về mẫu số chung như "Giàu", "giaU" thì cũng bằng