- [VB.NET] Chia sẻ source code lịch âm dương và hẹn lịch nhắc việc
- [C#] Hướng dẫn đọc thông số thiết bị Thiết bị kiểm tra Pin (HIOKI BATTERY HiTESTER BT3562)
- [VB.NET] Hướng dẫn giải captcha sử dụng dịch vụ AZCaptcha API trên winform
- [C#] Hướng dẫn chứng thực đăng nhập ứng dụng bằng vân tay (Finger Print) trên máy tính
- [C#] Color Thief cách xuất màu sắc thiết kế từ hình ảnh
- [C#] Cách tạo bản quyền và cho phép dùng thử ứng dụng Winform
- [C#] Hướng dẫn sử dụng trình duyệt web Chrome convert HTML sang tập tin file PDF
- [C#] Kết nôi điện thoại Android, IOS với App Winform via Bluetooth
- [DATABASE] Cách query cộng trừ dồn dần trong Sqlserver
- [C#] Thiết kế ứng dụng Console đẹp với thư viện Spectre.Console
- [C#] Thiết kế ứng dụng Single Instance và đưa ứng dụng lên trước nếu kiểm tra ứng dụng đang chạy
- [C#] Giới thiệu JSON Web Token và cách đọc chuỗi token
- [C#] Cách tăng giảm font chữ tất cả các control trên winform
- [DEVEXPRESS] Tích hợp chức năng Tìm kiếm Search vào CheckedComboboxEdit
- [C#] Gởi email Metting Calendar Reminder kèm nhắc thời gian lịch họp
- [C#] Tìm kiếm xem danh sách từ khóa có tồn tại trong đoạn văn bản hay không
- [C#] Thiết kế giao diện ứng dụng trên Console sử dụng thư viện Terminal.Gui
- [C#] Hướng dẫn tạo mã VietQR Payment API Winform
- [C#] Sử dụng thư viện BenchmarkDotNet đo hiệu năng của hảm Method
- [DEVEXPRESS] Tìm kiếm không dấu tô màu highlight có dấu trên C# Winform
[SQLSERVER] Hướng dẫn sử dụng chức năng tìm kiếm Full Text Search SQL SERVER 2016
Bài viết hôm nay, mình xin hướng dẫn các bạn sử dụng chức năng Full-Text Search trong Sqlserver. Trong bài viết này mình sử dụng Sqlserver 2016. Tuy nhiên, các bạn cũng có thể thực hiện bài viết này từ phiên bản Sqlserver 2008 trở đi.
Sử dụng tìm kiếm FULL-TEXT Search SQLSERVER
Vậy Full-Text Search là gì? Và chúng ta sử dụng nó như thế nào?
Trong mỗi ứng dụng Application hay website thì chức năng tìm kiếm thì không bao giờ thiếu. Vậy nên chức năng tìm kiếm là rất quan trọng.
Như các bạn đã biết, thường tìm kiếm chúng ta thường sử dụng từ khóa "LIKE" để trả về cho chúng ta kết quả gần đúng. Tuy nhiên, trong thực tế thì với việc tìm kiếm sử dụng từ khóa "LIKE" đôi khi cho chúng ta kết quả không được mong muốn. Mình xin ví dụ:
Ví dụ:
Ở một trang web bán hàng, khi chúng ta đánh cụm từ “giày bóng dá”, người dùng mong muốn nhận được kết quả có từ: “giày bóng đá”, “bóng đá”, “đá bóng”,”giày”,”bóng”… Vị trí của các từ xuất hiện trong kết quả có thể không giống với cụm từ đưa vào, mà có sự đảo ngược lại, đồng nghĩa, trái nghĩa.
Các bạn thể tìm kiếm này bằng cách code, tuy nhiên chúng ta sẽ mất rất khó khăn và phức tạp.
Hiện tại các hệ quản trị cơ sở dữ liệu như SQL SERVER hay MY SQL đều có đã tích hợp sẵn chức năng FULL-TEXT search cho chúng ta sử dụng.
· Tìm từ đồng nghĩa (VD đưa vào là: “man”, sẽ tìm các từ có “man” và “men”).
· Tìm từ gần đúng, so từng từ trong cụm từ, đảo vị trí.
· Hỗ trợ tìm kiếm có đấu (VD đưa vào: “Giay bong da”, vẫn sẽ tìm ra kết quả “giày bóng đá”).
· Loại bỏ các từ khóa noise (nhiễu).
Hướng dẫn kiểm tra Full Text Search đã được cài đặt hay chưa:
Đầu tiên là cài đặt Full Text Search, quý vị mở SQL Studio Management, nếu câu lệnh trên cho kết quả 0 nghĩa là Full-text chưa được cài đặt.
Các bạn kiểm tra bằng câu truy vấn sau:
SELECT SERVERPROPERTY('IsFullTextInstalled')
Thử nghiệm Full-text Search dưới SQL
Để thử nghiệm Full-text Search, chúng ta cần có database. Tôi đã chuẩn bị sẵn cho các bạn 1 database sản phẩm với hơn 1000 entries. Các bạn có thể tải script database này tại đây
http://www.mediafire.com/view/srijhaz8090nj0g/fullTextDatabase.sql
Sau khi, cài đặt Full Text xong, chúng ta bắt đầu cài đặt catalog cho database
Các bạn vui lòng chọn Accent-insensitive. Và dưới đây là kết quả
Bước 2: Tạo full-text index cho cột Name của sản phẩm. Chúng ta có thể define Full-text index bằng câu lệnh query, nhưng mìnhsẽ hướng dẫn cách dùng Full-text Wizard.
Bước 3: Chọn bảng cần tạo full-text index, chọn define full-text index
Index này là khóa chính chứ ko phải Full-text Index, các bạn cẩn thận kẻo nhầm.
Bước 4: Các bạn check vào cột cần tạo index, tùy vào language của cột mà chọn (Mình cũng chưa rõ SQL Server có hỗ trợ tốt từ đồng nghĩa, gần nghĩa Tiếng Việt chưa, nhưng cứ chọn)
Chọn Automatically. Mỗi có thay đổi (Insert, update, delete), full-text index sẽ tự động cập nhật. Việc này sẽ làm quá trình insert/update/delete chậm đi.
Nếu chọn Manually, các bạn sẽ phải set-up schedule cập nhật index theo thời gian ở bước sau.
Như trên hình đã nói, nếu bảng của chúng ta khá lớn, hoặc catalog đã dùng để index 1 bảng khác, chúng ta nên tạo thêm catalog riêng cho bảng của mình.
Nếu ở bước trước các bạn chọn Manually, bước này các bạn nên set thời gian để table populate full-text index.
Vậy là các bước thực hiện tạo catalog trên database đã hoàn tất. Bây giờ, chúng ta bắt đầu test Full text search nó khác với "LIKE" như thế nào?
Ví dụ, chúng ta muốn tìm tất cả các sản phẩm có chữ “Bình” trong tên.
Ta cùng test thử với 3 câu query như sau
Như ta thấy, với câu query cuối cùng (Có CONTAINS, chúng ta chỉ cần chữ ‘binh’ là đã có kết quả đúng)
Ta thử tiếp với 2 câu query sau
Ta thấy, với kí tự “chu” đánh vào, toán tử LIKE cho kết quả có “chuột”, trong khi Full-text tìm các kết quả có từ “chữ”, “chủ”…, đúng với yêu cầu hơn.
Nếu muốn tìm toàn bộ những sản phẩm mà bên trong có từ “chu”, ta sửa lại câu lệnh Full-text. Thay ‘chu’ bằng ‘”*chu*”’
Câu lệnh query thứ 2 thường được sử dụng là FREETEXT.
VD trực quan, khi chúng ta muốn tìm sản phẩm honda wave
Toán tử FREETEXT tìm kiếm toàn bộ những sản phẩm có chữ “honda” và wave.
Giả sử chúng ta đổi từ khóa thành “wave honda”.
Toán từ LIKE và CONTAINS không cho kết quả nhưng toán tử FREETEXT vẫn cho kết quả đúng.
Ta sẽ tìm hiểu sơ qua lệnh FREETEXTTABLE
Ta đưa vào tên bảng, tên trường và cụm từ cần tìm. Bảng KEY_TBL được tạo ra sẽ gồm 2 trường là KEY và RANK. KEY chính là khóa chính của bảng đưa vào, RANK là độ gần đúng của từ đưa vào. VD như hình trên, những từ chứa cả “honda” và “wave” sẽ có rank cao hơn những từ chỉ chứa 1 trong 2.
Phần CONTAINS còn nhiều chức năng khá hay, các bạn có thể tìm hiểu thêm tại đây:
http://technet.microsoft.com/en-us/library/ms187787%28v=sql.105%29.aspx
http://technet.microsoft.com/en-us/library/ms142583.aspx
Lưu ý: Câu lệnh QUERY của Full-text ở mỗi hệ quản trị CSDL là khác nhau, đó đó câu lệnh Full-text bên MySQL, PostgreSQL và MS SQL là hoàn toàn khác nhau, không thể chuyển đổi qua lại giữa các hệ CSDL.
Tìm kiếm with un Unicode
ALTER FULLTEXT CATALOG [tên catalog] REBUILD WITH ACCENT_SENSITIVITY = OFF
HAVE FUN :)
Tác giả: Phạm Huy Hoàng