Tham khảo cách cài đặt Sphinx ở bài trước. Đây là file cấu hình giúp Sphinx có thể đánh dấu chỉ mục (indexing) và tiếng kiếm tiếng Việt không phân biệt hoa/ thường có dấu hoặc không dấu (case-insensitive và accents-insensitive).
Về cơ bản, thì chúng ta phải cấu hình charset_table để mapping các ký tự có dấu (accents) trở về các ký tự không dấu (ví dụ như a,á,à,ạ,ã v.v –> a). Điều này rất quan trọng vì trong thực tế không phải lúc nào cũng gõ tiếng Việt có dấu. Và lưu ý, charset_table chỉ cấu hình trên một dòng duy nhất.
Ví dụ chúng ta có bảng images như sau:
Và file cấu hình sphinx.cnf như sau:
Về cơ bản thì Sphinx có 2 phần chính:
indexer: dùng để đánh dấu chỉ mục dữ liệu (indexing) tài liệu (xem thêm ở bài viế MySQL Full-text search)
searchd (search deamon): đây là một chương trình chạy ngầm để tìm kiếm trong index. Điểm khác biệt của Sphinx và MySQL là Sphinx không thực sự trả về kết quả, mà chỉ trả về id của dòng cần tìm trong MySQL.
Sau khi cài đặt thì chúng ta cần phải tiến hành index dữ liệu trong database MySQL. Do đây không phải là cấu hình real-time index, nên ta phải thiết lập thêm cronjob để nó index dữ liệu định kỳ và cấu hình để sphinx khởi động cùng server (xem thêm ở đây). Nếu như muốn sử dụng real-time index của Sphinx, thì ta phải sử dụng nó như một storage engine (SphinxSE) của MySQL và phải compile lại source của MySQL (xem thêm ở đây).
Để re-index lại dữ liệu ta phải thêm tham số --rotate vào
–rotate is used for rotating indexes. Unless you have the situation where you can take the search function offline without troubling users, you will almost certainly need to keep search running whilst indexing new documents. –rotate creates a second index, parallel to the first (in the same place, simply including .new in the filenames). Once complete, indexer notifies searchd via sending the SIGHUP signal, and searchd will attempt to rename the indexes (renaming the existing ones to include .old and renaming the .new to replace them), and then start serving from the newer files. Depending on the setting of seamless_rotate, there may be a slight delay in being able to search the newer indexes.
Tức là dùng option --rotateotate để tránh trường hợp chức năng search không dùng được khi server đang tiến hành index lại dữ liệu, thì indexer sẽ tạo ra một file index thứ hai để search deamon tìm kiếm trong lúc tiến hành index lại dữ liệu. Sau khi hoàn tất thì, indexer sẽ báo cho search deamon biết để tìm kiếm trong file index mới.
Sau đó chúng ta cần phải khởi động search deamon (searchd) và trỏ nó tới file cấu hình sphinx.cnf ở trên
Chúng ta có thể test bằng cách thực hiện tìm kiếm từ dòng lệnh
Hoặc sử dụng Sphinx Search API . Code này chủ yếu là quick and dirty để test các keywords khác nhau.