10/10/2018, 11:24

Fulltext search và tiếng Việt trong MySQL

Các bác cho hỏi có giải pháp nào tìm kiếm chính xác chuỗi tiếng Việt trong MySQL không khi text được lưu trữ với Collation là utf8_unicode_ci ?

Nếu có thể dùng Vietnamese Collation như trong các phiên bản MySQL sau này thì vấn đề sẽ dễ dàng xử lý theo chỉ dẫn ở đây. Nhưng db trên host của tớ chưa hỗ trợ thứ này!

Không lẽ chỉ còn cách tạo một trường chứa text đã loại bỏ dấu để phục vụ riêng việc tìm kiếm hay sao? Dung lượng db sẽ tăng lên quá lớn vì nội dung chủ yếu nằm ở các trường gắn index này.

Mong các bác chỉ giáo.
loading ... viết 13:24 ngày 10/10/2018
bác dùng một máy tìm kiếm riêng chạy độc lập với mySQL. dùng lucene chẳng hạn
sacroyant viết 13:34 ngày 10/10/2018
Thank bác. Tôi vừa ngó qua Lucene và Sphinx. Lucene cài đặt dễ nhưng đi với Zend nên rất cồng kềnh. Installing Sphinx đòi hỏi can thiệp vào server. Nói chung cả 2 anh này đều không dùng được.

Xem ra phải tìm cách khác chủ động hơn
anhchanghaudau viết 13:30 ngày 10/10/2018
Được gửi bởi sacroyant
Thank bác. Tôi vừa ngó qua Lucene và Sphinx. Lucene cài đặt dễ nhưng đi với Zend nên rất cồng kềnh. Installing Sphinx đòi hỏi can thiệp vào server. Nói chung cả 2 anh này đều không dùng được.

Xem ra phải tìm cách khác chủ động hơn
Thì như cách đầu bác đã nói rồi còn gì
Vô Thin viết 13:24 ngày 10/10/2018
Được gửi bởi sacroyant
Thank bác. Tôi vừa ngó qua Lucene và Sphinx. Lucene cài đặt dễ nhưng đi với Zend nên rất cồng kềnh. Installing Sphinx đòi hỏi can thiệp vào server. Nói chung cả 2 anh này đều không dùng được.

Xem ra phải tìm cách khác chủ động hơn
Không dùng được vì khó dùng do không rành Java hay không có server hỗ trợ. Vậy dùng Solr đi, thấy nó mạnh đấy (bà con với Lucene). Hay là dùng Microsoft SharePoint nếu nhiều tiền
anhchanghaudau viết 13:32 ngày 10/10/2018
Được gửi bởi superthin
Không dùng được vì khó dùng do không rành Java hay không có server hỗ trợ. Vậy dùng Solr đi, thấy nó mạnh đấy (bà con với Lucene). Hay là dùng Microsoft SharePoint nếu nhiều tiền
Chắc bác ấy dang dùng host share thì những cái công cụ cao siêu kia làm gì có đất dụng võ
vnntech.com viết 13:25 ngày 10/10/2018
sphinx đâu support tiếng việt đâu các bác nhỉ, trước mình test thử nhưng nó chỉ support tiếng Anh và Nga.
Hanaziki viết 13:40 ngày 10/10/2018
Được gửi bởi vnntech.com
sphinx đâu support tiếng việt đâu các bác nhỉ, trước mình test thử nhưng nó chỉ support tiếng Anh và Nga.
Bác phải định nghĩa một cái table char cho nó hiểu tiếng việt. Rông bay đang dùng nó đó và em cũng vậy ...
sacroyant viết 13:31 ngày 10/10/2018
Cảm ơn các bác góp ý. Tôi dùng shared host nên bị giới hạn nhiều điểm. Quyết định tạo thêm trường không dấu để tìm kiếm

@ superthin : tớ dùng shared host đúng như anhchanghaudau nhận xét.
@ vnntech.com : tuy chỉ riêng tiếng Nga và tiếng Anh được hỗ trợ, nhưng nếu định nghĩa thêm theo cách Hanaziki nói thì có thể giải quyết được phần tiếng Việt. Trên doc của nó có nhắc qua vấn đề này.
Vô Thin viết 13:28 ngày 10/10/2018
Nếu đúng là dùng Shared Hosting thì chắc chắn là việc tìm kiếm cũng chỉ giới hạn cho chừng đó thôi, không đòi hỏi hơn được. Tốt nhất là nghiên cứu cách index của phpBB hoặc các diễn đàn khác.

Về chi tiết nó cũng khá rối rắm, nhưng xin vắn tắt cách nó làm: khi người dùng / admin gửi bài, bẻ bài đó ra thành một mảng gồm các từ, loại bỏ các từ trùng lắp. Xong, dò trong một table đã được tạo lập từ trước (dữ liệu là cuốn từ điển) và rồi ghi nhận lại vào một table các từ kèm ID của bài viết để khi tìm ra, trả về đúng bài viết.

Không cần phải loại bỏ dấu tiếng Việt nếu dùng MySQL 5.0 trở lên và không có ý định cho người dùng tìm kiếm không dấu.

Với một trang web có khoảng 500 ngàn bài viết, giải pháp trên có thể dùng với Shared Hosting gói có giá < 20USD/tháng.
Bài liên quan
0