Trong bài này, chúng ta sẽ học cách cài đặt và cấu hình Sphinx trên Ubuntu 16.04. Sphinx là công cụ tìm kiếm toàn văn bản (full-text search) mã nguồn mở, hiệu suất cao với dữ liệu lớn từ nhiều nguồn (SQL, file text, v.v.).
Tính năng của Sphinx
- Chỉ mục nâng cao và công cụ truy vấn tốt.
- Hiệu suất tìm kiếm và lập chỉ mục cao.
- Kết quả xử lý sau nâng cao.
- Dễ dàng mở rộng với tìm kiếm nâng cao.
- Tích hợp với nguồn SQL và XML.
- Có thể mở rộng xử lý dữ liệu lớn với hàng nghìn truy vấn.
Điều kiện tiên quyết
Trước khi bắt đầu, cần:
- Máy Ubuntu với user non-root có quyền sudo.
- MySQL đã cài đặt.
Cài đặt Sphinx
Cài đặt qua kho mặc định Ubuntu bằng apt-get:
$ sudo apt-get install sphinxsearch
(Kết quả cài đặt hiển thị các gói phụ thuộc: libmysqlclient20, libstemmer0d, sphinxsearch)
Tạo cơ sở dữ liệu kiểm thử cho Sphinx
Đăng nhập MySQL và tạo database test, nhập dữ liệu mẫu:
$ mysql -u root -p mysql> create database test; mysql> SOURCE /etc/sphinxsearch/example.sql; mysql> quit
Cấu hình Sphinx cho tìm kiếm
Sao chép file cấu hình mẫu và chỉnh sửa:
$ cp /etc/sphinxsearch/sphinx.conf.sample /etc/sphinxsearch/sphinx.conf $ sudo vi /etc/sphinxsearch/sphinx.conf
File cấu hình gồm 3 block chính: source, index, searchd.
Block source trong sphinx.conf
source src1 {
type = mysql
sql_host = localhost
sql_user = root
sql_pass = ubuntu
sql_db = test
sql_port = 3306
sql_query = \
SELECT id, group_id, UNIX_TIMESTAMP(date_added) AS date_added, title, content \
FROM documents
sql_attr_uint = group_id
sql_attr_timestamp = date_added
}
Block index trong sphinx.conf
index test {
source = src1
path = /var/lib/sphinxsearch/data/test
docinfo = extern
}
Block searchd trong sphinx.conf
searchd {
listen = 9312:sphinx
listen = 9306:mysql41
log = /var/log/sphinxsearch/searchd.log
query_log = /var/log/sphinxsearch/testquery.log
read_timeout = 5
max_children = 30
pid_file = /var/run/sphinxsearch/testsearchd.pid
seamless_rotate = 1
preopen_indexes = 1
unlink_old = 1
binlog_path = /var/lib/sphinxsearch/datatest
}
Quản lý chỉ mục trên Sphinx
Lập chỉ mục từ file cấu hình:
$ sudo indexer --all
Tạo cronjob để cập nhật chỉ mục định kỳ (ví dụ hàng giờ):
@hourly /usr/bin/indexer --rotate --config /etc/sphinxsearch/sphinx.conf --all
Khởi động dịch vụ Sphinx
Bật tự động khởi động trong /etc/default/sphinxsearch:
START=yes
Khởi động lại dịch vụ:
$ sudo systemctl restart sphinxsearch.service
Kiểm tra trạng thái:
$ sudo systemctl status sphinxsearch.service
Kiểm tra tìm kiếm Sphinx
Kết nối SphinxQL qua port 9306:
$ mysql -h0 -P9306
Tìm kiếm từ "test":
mysql> SELECT * FROM test WHERE MATCH('test'); SHOW META;
Kết quả trả về 3 bản ghi khớp.
Với cài đặt này, Sphinx trở thành công cụ tìm kiếm mạnh mẽ, xử lý hàng tỷ tài liệu, terabyte dữ liệu và hàng nghìn truy vấn/giây.