09/10/2018, 23:39
Tìm kiếm theo cụm từ
Kính nhờ các bác chỉ giáo cho tui 1 điểm chưa rõ về cách viết trang tìm kiếm insite.
Hiện tại, tui vẫn dùng cách cũ là phân tích chuỗi gửi lên bởi khách, và tách ra thành từng từ theo khoảng trắng rồi push vào 1 mảng. Mảng này có phần tử đầu tiên là chuỗi gốc. Ví dụ khách nhập vào cụm từ "Giải thuật tìm kiếm", không có dấu ngoặc kép, thì 1 mảng $Keyword gồm 5 phần tử : "Giải thuật tìm kiếm", "Giải", "thuật", "tìm", "kiếm"; sẽ được tạo ra. Sau đó câu lệnh SQL sẽ có dạng :
"Select * From tblTablename WHERE FieldName like '%".$Keyword[0]."%'
OR FieldName like '%".$Keyword[1]."%' ....
Câu lệnh trên có vẻ khá hợp lý, và kết quả trả về là chính xác nếu từ khóa chỉ gồm 1 từ ! Còn khi từ khóa là một chuỗi thì kết quả lại nằm trên 1 phạm vi khá rộng. Ví dụ gõ "a và b", không có dấu nháy kép, thì nó trả về toàn bộ các bài viết, vì bài nào mà chẳng chứa ký tự "a"
Bây giờ tui mô phỏng Google, ưu tiên tìm kiếm riêng các cụm từ nằm trong ngoặc kép. Lại là xử lý chuỗi, nhưng có chút rắc rối. Đó là khi người sử dụng cung cấp nhiều cặp nháy kép, hoặc số nháy kép bị lẻ cặp, thì tui chưa tìm ra cách xử lý tốt nhất trong trường hợp này.
Một vấn đề khác nữa là sắp xếp kết quả tìm kiếm như thế nào để có thể trình bày theo thứ tự giảm dần về số lượng từ khoá so khớp (hay mức độ chính xác).
Xin các bác nhiều kinh nghiệm gợi ý giúp một vài cách giải quyết đơn giản và hiệu quả.
Hiện tại, tui vẫn dùng cách cũ là phân tích chuỗi gửi lên bởi khách, và tách ra thành từng từ theo khoảng trắng rồi push vào 1 mảng. Mảng này có phần tử đầu tiên là chuỗi gốc. Ví dụ khách nhập vào cụm từ "Giải thuật tìm kiếm", không có dấu ngoặc kép, thì 1 mảng $Keyword gồm 5 phần tử : "Giải thuật tìm kiếm", "Giải", "thuật", "tìm", "kiếm"; sẽ được tạo ra. Sau đó câu lệnh SQL sẽ có dạng :
"Select * From tblTablename WHERE FieldName like '%".$Keyword[0]."%'
OR FieldName like '%".$Keyword[1]."%' ....
Câu lệnh trên có vẻ khá hợp lý, và kết quả trả về là chính xác nếu từ khóa chỉ gồm 1 từ ! Còn khi từ khóa là một chuỗi thì kết quả lại nằm trên 1 phạm vi khá rộng. Ví dụ gõ "a và b", không có dấu nháy kép, thì nó trả về toàn bộ các bài viết, vì bài nào mà chẳng chứa ký tự "a"
Bây giờ tui mô phỏng Google, ưu tiên tìm kiếm riêng các cụm từ nằm trong ngoặc kép. Lại là xử lý chuỗi, nhưng có chút rắc rối. Đó là khi người sử dụng cung cấp nhiều cặp nháy kép, hoặc số nháy kép bị lẻ cặp, thì tui chưa tìm ra cách xử lý tốt nhất trong trường hợp này.
Một vấn đề khác nữa là sắp xếp kết quả tìm kiếm như thế nào để có thể trình bày theo thứ tự giảm dần về số lượng từ khoá so khớp (hay mức độ chính xác).
Xin các bác nhiều kinh nghiệm gợi ý giúp một vài cách giải quyết đơn giản và hiệu quả.
Bài liên quan
Khi bạn view source các trang có ký tự tiếng Việt Unicode thì có thấy nó hiển thị chuẩn không ?
Tớ làm được với 1 cụm rồi. Nhiều hơn 2 dấu nháy thì vẫn đành bỏ qua :
Không có ngoặc kép, trả về 21 kết quả :
Đặt trong ngoặc kép, chỉ còn 3 kết quả so khớp nguyên cụm từ :