10/10/2018, 09:37
[Thảo Luận] Thiết kế tìm kiếm (search engine) cho website
Mình sử dụng PHP và MySql.
Mình có ý tưởng tìm kiếm trong trang tìm kiếm như sau:
- Giả sử mình cần tìm từ: "loi nhac" thì thuật toán tiến hành tìm như sau:
+ Tìm trong CSDL có từ "loi nhac" ko?
+ Sau đó tìm trong CSDL có từ "loi" ko?
+ Sau đó tìm trong CSDL có từ "nhac" ko?
Ý tưởng là sẽ explode string keyword và dùng LIKE của mysql để query từ từ.
Demo: select * from data where tenbaihat like '%loi nhac%' or '%loi%' or '%nhac%'.
Nhưng vấn đề ở đây là hiện thị kết quả không theo ý muốn, những kết quả gần nhất với từ khóa lại không hiển thị đầu tiên mà săp xếp theo a b c. Vây mọi người cùng tham gia thảo luận để khắc phục vấn đề trên nhé.
Thanks all !
Mình có ý tưởng tìm kiếm trong trang tìm kiếm như sau:
- Giả sử mình cần tìm từ: "loi nhac" thì thuật toán tiến hành tìm như sau:
+ Tìm trong CSDL có từ "loi nhac" ko?
+ Sau đó tìm trong CSDL có từ "loi" ko?
+ Sau đó tìm trong CSDL có từ "nhac" ko?
Ý tưởng là sẽ explode string keyword và dùng LIKE của mysql để query từ từ.
Demo: select * from data where tenbaihat like '%loi nhac%' or '%loi%' or '%nhac%'.
Nhưng vấn đề ở đây là hiện thị kết quả không theo ý muốn, những kết quả gần nhất với từ khóa lại không hiển thị đầu tiên mà săp xếp theo a b c. Vây mọi người cùng tham gia thảo luận để khắc phục vấn đề trên nhé.
Thanks all !
Bài liên quan
http://www.sphinxsearch.com/
$str2 = ereg_replace("OR '%%'", "", $str1);
$kytu = "'%".$str2."%'";
-> select ...LIKE $kytu";
sau bước trên,bạn làm một bước nữa để sắp xếp lại theo ý muốn là được. ví dụ như đếm số lần lặp của từ rồi xếp theo số lần lặp.
nè gọi gì là search.
tối ưu nhất vẫn là sử dụng robot. dánh index cho các trang và keywords. khi search chỉ cần show ra các mục đã index thoi.
Làm sao để được như thế?
Như ví dụ của bạn thì: search với từ "Lời nhạc" thì chính xác nhất là đúng từ "lời nhạc" -> "loi nhac" -> lời -> nhạc -> loi -> nhac.
các bạn phải đánh ranking cho thứ tự ưu tiên của việc tìm kiếm.
VD: "lời nhạc"+"love story"
khi người dùng tìm kiếm thì chỉ tìm trong bang index này trước và show ra. các kết quả tiếp theo sẽ được tìm lại trong csdl loại trừ các trường đã index và lưu vào bảng tạm đề phòng ngwowif dùng muốn mở rộng tìm kiếm.
các keyword người dùng yêu cầu đầu tiên loại bỏ các từ phổ biến và cắt từ theo từ điển thành từ có nghĩa. sau khi tìm kiếm cho ngwowif dùng, chuyển vào bảng từ khóa để bổ xung nếu chưa có. thông thwowngf dwx liệu trong sql không có sự thay đổi đột biến. nên chỉ cần index lại khi nhập dữ liệu hoặc khi có từ khóa mới thôi. việc đánh index chỉ cần tạo thread mới để không ảnh hưởng tới ctr search là được.
cũng có một cách nâng cao hiệu quả rất đơn giản là dạy người dùng các quy tắc search.
sql cũng hỗ trợ đánh index và fulltextsearch