[Vietnam Mobile Day 2014] Tổng quan thị trường nội dung số cho smartphon...
Speaker nguyen son tung search tuning
1. Tìm kiếm chính xác hơn cho website
Nguyễn Sơn Tùng
nstung@gmail.com
Tiki Corp
2. Đặt vấn đề
Các giải pháp search phổ biến:
MySQL Like/Fulltext
Lucene based (Lucene, Sphinx, Solr)
Chưa support hoàn toàn tiếng Việt
Developer khắc phục bằng workaround
⇒ Tuning để tìm kiếm tốt hơn
3. Overview về MySQL search
Like => Backend
Fulltext => dùng được, nhưng chưa tốt
Peformance => kém
4. Vấn đề tiếng Việt trong MySQL
Roadmap:
2004 Rased lên bởi 1 bug report #4745
2007 Có giải pháp custom charset
2012 Được hứa đưa vào trong MySQL 5.6 nhưng r5.6.9 vẫn chưa có
⇒ Do it yourself
5. Workaround
Loại bỏ dấu (removeAccents)
Indexer: Thêm secondary column, set weigh
Search: removeAccents(keyword)
Mở rộng keyword
Search với nhiều keyword theo từ điển
Performance issue => Bad practice
6. Search tuning
Độ chính xác
Bắt SE hiểu bộ mã tiếng Việt
Kỹ thuật khác hỗ trợ:
Search suggestion
Data-click mining
Performance:
Dùng external openSE có performance tốt
7. Hiểu đúng bộ ký tự tiếng Việt
Vietnamese collation
Nguồn: http://vietunicode.sourceforge.net/charset/v3.htm
8. Một chút về Full-text search
Rank (Weight) = f(frequency, sequence)
Frequency: tần suất xuất hiện từ khoá
Sequence: thứ tự xuất hiện (longest common string)
Ví dụ Sphinx:
SPH_RANK_MATCHANY = sum((word_count+(lcs-
1)*max_lcs)*user_weight)
9. Vấn đề search “đúng” tiếng Việt
Quy ước chuyển đổi dấu mang tính tương đối
User gõ không dấu => kết quả có dấu + không dấu
User gõ có dấu => kết quả có dấu mang ý nghĩ khác
Ví dụ:
Gõ “trang” => “trang”, “trăng”, “trâng”
Gõ “trăng” => “trâng” !!sai nghĩa!!
⇒ Giải pháp
⇒ chấp nhận chuyển đổi dấu: lấy frequency tối đa
⇒ correct bằng sequence của SE
10. Custom charset
Greedy search (sequence) bằng custom charset theo quy t ắc d ấu
tiếng Việt
a=à=ả=á=ã=ạ=â=ầ=ẩ=ấ=ẫ= ậ=ă= ằ= ẳ= ắ= ẵ= ặ
Ưu điểm
No pre-processing
No secondary column
Better performance
11. Custom charset cho MySQL
charset/Index.xml
Loose charset
utf8_vietnamese_loose_ci
Tight charset
utf8_vietnamse_tight_ci