Tìm kiếm tiếng việt có dấu trong mysql
Giả sử ta có 1 bảng dữ liệu khách hàng(có khoảng 10000 bản ghi). Bây giờ chúng ta muốn tìm 2000 khách hàng có description bắt đầu bằng từ Queen. Show
Nội dung chính Show
Câu lệnh quen thuộc mà chúng ta thường sử dụng: 0 Trước khi xem kết quả, chúng ta hãy xem hiệu năng của câu lệnh mang lại bằng việc thêm từ khóa EXPLAIN vào trước câu lệnh trên. Ta thấy kết quả như sau:Ta chú ý một vài cột trong bảng dữ liệu này như:
Bài toán 2
II. MySQL Fulltext Search(FTS)
2.1 Inverted IndexĐiều làm nên sự khác biệt giữa FTS và các kĩ thuật search thông thường chính là Inverted index. Inverted Index là 1 kĩ thuật index trong database, một kĩ thuật quan trọng trong Fulltext Search. Thế Inverted Index là gì?Inverted Index là một cấu trúc dữ liệu, nhằm mục đích map giữa các từ, chữ số và các document chứa chúng. Cụ thể hơn:
Vậy việc tạo index theo term như trên có lợi thế nào?Hãy giả sử bạn muốn query cụm từ "Son, is, Developer", thì thay vì việc phải scan từng document một, bài toán tìm kiếm document chứa 3 term trên sẽ trở thành phép toán union của 3 tập hợp Để dễ hiểu, các bạn xem ví dụ dưới đây:
Inverted Index:
Cách hoạt động: Đầu tiên hệ thống nó sẽ tách chuỗi tìm kiếm ra thành các từ Son, is, Developer. Sau đó sẽ tìm trong inverted index và được các tập hợp như sau: {D1,D3} {D1,D3} {D1,D2,D3} Query cụm “Son, is, Developer” thì ta sẽ có biểu thức union: {D1,D3} union {D1,D3} union {D1, D2, D3} = {D1} => việc tìm kiếm trở nên nhanh hơn nhiều thay vì việc phải scan toàn bộ table để tìm ra tài liệu có chứa từ đó. Thực hiện FTS
2.2 Kỹ thuật Fuzzy Search- Fuzzy Seach (tìm kiếm "mờ") là khái niệm để chỉ kỹ thuật để tìm kiếm một xâu "gần giống" (thay vì "giống hệt") so với một xâu cho trước. So sánh Substring
Khoảng cách Levenshtein
2.3 IN BOOLEAN MODE
2.4 Query ExpansionMySQL sẽ thực hiện search 2 lần, trong lần search thứ 2 MySQL sẽ tìm kết hợp cụm từ tìm kiếm gốc với những từ thích hợp nổi bật so với từ khóa gốc. Mặt khác đây chính là cái hay nhất trong fulltext search
2.5 Đánh index kiểu B-tree- B-Tree là cậy tự cân bằng (self-balancing), nghĩa là khi thêm hoặc xoá 1 node thì cây sẽ có những action để đảm bảo chiều cao của cây càng thấp càng tốt. Mỗi node cha có giá trị lớn hơn node con này và nhỏ hơn node con khác. Nó sẽ tìm con trỏ bên phải bằng cách nhìn vào dữ liệu ở node pages, các node page có chứa dữ liệu của các node con.
So sánh với câu search like lúc ban đầu, so sánh về tốc độ cũng như hiệu năng của câu lệnh sau khi được đánh index. Về hiệu năng Chú ý :
3. Áp dụng FTS với Scout and Algolia PackagesBước 1. Cài đặt ứng dụng Laravel:
Bước 2. Cài đặt Packages
Sau khi chạy câu lệnh thành công, mở file "config/app.php" và thêm service provider.
Chạy câu lệnh để tạo file scout.php trong thư mục config:
Bước 3. Cấu hình cho Packages Giờ bạn hãy mở file .env và thêm id và sercet vào như dưới đây.
Bước 4. Thiết lập Model
Bước 5: Cấu hình chỉ mục
Bước 6: Đánh chỉ mục
Bước 7: Truy vấn
4. Kết luậnĐây là phân giới thiệu chi tiết để các bạn có thẻ nắm được phần nào về Fulltext search cũng như là cách đánh index. Hiện nay có rất nhiều engine package hỗ trợ tìm kiếm rất tốt như: Algolia (mất phí), elasticsearch...nhưng việc tìm hiểu trên MySQL vẫn có gì đó hay ho hơn. |