Cách cài đặt và cấu hình Sphinx trên Ubuntu 16.04
Sphinx là một công cụ tìm kiếm open-souce cho phép tìm kiếm toàn văn. Nó được biết đến nhiều nhất để thực hiện các tìm kiếm trên dữ liệu lớn rất hiệu quả. Dữ liệu được lập index nói chung có thể đến từ các nguồn rất khác nhau: database SQL, file văn bản thuần túy, file HTML, hộp thư, v.v.Một số tính năng chính của Sphinx là:
- Hiệu suất lập index và tìm kiếm cao
- Công cụ lập index và truy vấn nâng cao
- Xử lý hậu kỳ tập hợp kết quả nâng cao
- Khả năng mở rộng đã được chứng minh lên đến hàng tỷ tài liệu, hàng terabyte dữ liệu và hàng nghìn truy vấn mỗi giây
- Tích hợp dễ dàng với các nguồn dữ liệu SQL và XML cũng như các giao diện tìm kiếm SphinxQL, SphinxAPI hoặc SphinxSE
- Mở rộng quy mô dễ dàng với các tìm kiếm phân tán
Trong hướng dẫn này, ta sẽ cài đặt Sphinx với server MySQL bằng cách sử dụng file SQL mẫu có trong gói phân phối. Nó sẽ cung cấp cho bạn một ý tưởng cơ bản về cách sử dụng Sphinx cho dự án của bạn.
Yêu cầu
Trước khi bắt đầu hướng dẫn này, bạn cần :
Một server Ubuntu 16.04.
Một user không phải root có quyền sudo , bạn có thể cài đặt theo hướng dẫn này .
MySQL được cài đặt trên server của bạn, mà bạn có thể cài đặt theo bước 2 của hướng dẫn này .
Bước 1 - Cài đặt Sphinx
Cài đặt Sphinx trên Ubuntu rất dễ dàng vì nó nằm trong repository root . Cài đặt nó bằng cách sử dụng apt-get
.
- sudo apt-get install sphinxsearch
Đến đây bạn đã cài đặt thành công Sphinx trên server của bạn . Trước khi khởi động daemon Sphinx, hãy cấu hình nó.
Bước 2 - Tạo Database Kiểm tra
Tiếp theo, ta sẽ cài đặt database bằng cách sử dụng dữ liệu mẫu trong file SQL được cung cấp cùng với gói. Điều này sẽ cho phép ta kiểm tra xem tìm kiếm Sphinx có hoạt động sau này không.
Hãy nhập file SQL mẫu vào database . Đầu tiên, đăng nhập vào shell server MySQL.
- mysql -u root -p
Nhập password cho user root MySQL khi được hỏi. Dấu nhắc của bạn sẽ thay đổi thành mysql>
.
Tạo một database giả. Ở đây, ta gọi nó là thử nghiệm , nhưng bạn có thể đặt tên cho nó bạn muốn .
- CREATE DATABASE test;
Nhập file SQL mẫu.
- SOURCE /etc/sphinxsearch/example.sql;
Sau đó, rời khỏi shell MySQL.
- quit
Đến đây bạn có một database chứa đầy dữ liệu mẫu. Tiếp theo, ta sẽ tùy chỉnh cấu hình của Sphinx.
Bước 3 - Cấu hình Sphinx
Cấu hình của Sphinx phải nằm trong một file có tên là sphinx.conf
trong /etc/sphinxsearch
. Cấu hình bao gồm 3 khối chính cần thiết để chạy: chỉ mục , tìm kiếm và nguồn . Ta sẽ cung cấp file cấu hình mẫu để bạn sử dụng và giải thích từng phần để bạn có thể tùy chỉnh sau.
Đầu tiên, tạo file sphinx.conf
.
- sudo nano /etc/sphinxsearch/sphinx.conf
Mỗi khối chỉ mục , tìm kiếm và nguồn được mô tả bên dưới. Sau đó, ở cuối bước này, toàn bộ sphinx.conf
được bao gồm để bạn sao chép và paste vào file .
Khối nguồn chứa loại nguồn, tên user và password của server MySQL. Cột đầu tiên của sql_query
phải là một id duy nhất. Truy vấn SQL sẽ chạy trên mọi index và kết xuất dữ liệu vào file index Sphinx. Dưới đây là mô tả của từng trường và chính khối nguồn.
-
type
: Loại nguồn dữ liệu cần lập index . Trong ví dụ của ta , đây là mysql . Các loại được hỗ trợ khác bao gồm pgsql, mssql, xmlpipe2, odbc, v.v. -
sql_host
: Tên server cho server MySQL. Trong ví dụ của ta , đây làlocalhost
. Đây có thể là một domain hoặc địa chỉ IP. -
sql_user
: Tên user để đăng nhập MySQL. Trong ví dụ của ta , đây là root . -
sql_pass
: Mật khẩu cho user MySQL. Trong ví dụ của ta , đây là password của user MySQL root . -
sql_db
: Tên của database lưu trữ dữ liệu. Trong ví dụ của ta , đây là thử nghiệm . -
sql_query
: Truy vấn kết xuất dữ liệu từ database vào index .
Đây là khối nguồn:
source src1 { type = mysql #SQL settings (for ‘mysql’ and ‘pgsql’ types) sql_host = localhost sql_user = root sql_pass = password sql_db = test sql_port = 3306 # optional, default is 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 }
Thành phần chỉ mục chứa nguồn và đường dẫn để lưu trữ dữ liệu.
trong
-
source
: Tên của khối nguồn. Trong ví dụ của ta , đây là src1 . -
path
: Đường dẫn để lưu index .
index test1 { source = src1 path = /var/lib/sphinxsearch/data/test1 docinfo = extern }
Thành phần searchd chứa cổng và các biến khác để chạy trình Sphinx.
-
listen
: Cổng mà Sphinx daemon sẽ chạy, theo sau là giao thức. Trong ví dụ của ta , đây là 9306: mysql41 . Các giao thức đã biết là : sphinx (SphinxAPI) và : mysql41 (SphinxQL) -
query_log
: Đường dẫn để lưu log truy vấn. -
pid_file
: Đường dẫn đến file PID của Sphinx daemon. -
seamless_rotate
: Ngăn chặn searchd quầy hàng trong khi quay chỉ với một lượng lớn dữ liệu để precache. -
preopen_indexes
: Có buộc mở trước tất cả các index khi khởi động hay không. -
unlink_old
: Có xóa các bản sao index cũ khi xoay vòng thành công hay không.
searchd { listen = 9312:sphinx #SphinxAPI port listen = 9306:mysql41 #SphinxQL port log = /var/log/sphinxsearch/searchd.log query_log = /var/log/sphinxsearch/query.log read_timeout = 5 max_children = 30 pid_file = /var/run/sphinxsearch/searchd.pid seamless_rotate = 1 preopen_indexes = 1 unlink_old = 1 binlog_path = /var/lib/sphinxsearch/data }
Cấu hình đầy đủ để copy paste ở bên dưới. Biến duy nhất bạn cần thay đổi bên dưới là biến sql_pass
trong khối nguồn, được đánh dấu.
source src1 { type = mysql sql_host = localhost sql_user = root sql_pass = your_root_mysql_password 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 } index test1 { source = src1 path = /var/lib/sphinxsearch/data/test1 docinfo = extern } searchd { listen = 9306:mysql41 log = /var/log/sphinxsearch/searchd.log query_log = /var/log/sphinxsearch/query.log read_timeout = 5 max_children = 30 pid_file = /var/run/sphinxsearch/searchd.pid seamless_rotate = 1 preopen_indexes = 1 unlink_old = 1 binlog_path = /var/lib/sphinxsearch/data }
Để khám phá các cấu hình khác, bạn có thể xem qua file /etc/sphinxsearch/sphinx.conf.sample
, file này có tất cả các biến được giải thích chi tiết hơn.
Bước 4 - Quản lý Chỉ mục
Trong bước này, ta sẽ thêm dữ liệu vào index Sphinx và đảm bảo index này luôn được cập nhật bằng cách sử dụng cron
.
Đầu tiên, thêm dữ liệu vào index bằng cách sử dụng cấu hình ta đã tạo trước đó.
- sudo indexer --all
Bạn sẽ nhận được một cái gì đó giống như sau.
OutputSphinx 2.2.9-id64-release (rel22-r5006) Copyright (c) 2001-2015, Andrew Aksyonoff Copyright (c) 2008-2015, Sphinx Technologies Inc (http://sphinxsearch.com) using config file '/etc/sphinxsearch/sphinx.conf'... indexing index 'test1'... collected 4 docs, 0.0 MB sorted 0.0 Mhits, 100.0% done total 4 docs, 193 bytes total 0.010 sec, 18552 bytes/sec, 384.50 docs/sec total 4 reads, 0.000 sec, 0.1 kb/call avg, 0.0 msec/call avg total 12 writes, 0.000 sec, 0.1 kb/call avg, 0.0 msec/call avg
Trong môi trường production , cần phải cập nhật chỉ số. Để làm điều đó, hãy tạo một cronjob. Đầu tiên, mở crontab.
- crontab -e
Bạn có thể được hỏi bạn muốn sử dụng editor nào. Chọn cái nào bạn thích; trong hướng dẫn này, ta đã sử dụng nano
.
Cronjob theo dõi sẽ chạy hàng giờ và thêm dữ liệu mới vào index bằng cách sử dụng file cấu hình mà ta đã tạo trước đó. Copy paste nó vào cuối file , sau đó lưu file .
@hourly /usr/bin/indexer --rotate --config /etc/sphinxsearch/sphinx.conf --all
Bây giờ Sphinx đã được cài đặt và cấu hình đầy đủ, ta có thể bắt đầu dịch vụ và dùng thử.
Bước 5 - Khởi động Sphinx
Theo mặc định, daemon Sphinx bị tắt. Đầu tiên, ta sẽ kích hoạt nó bằng cách thay đổi dòng START=no
thành START=yes
trong /etc/default/sphinxsearch
.
- sudo sed -i 's/START=no/START=yes/g' /etc/default/sphinxsearch
Sau đó, sử dụng systemctl
để khởi động lại daemon Sphinx.
- sudo systemctl restart sphinxsearch.service
Để kiểm tra xem trình Sphinx có đang chạy chính xác hay không, hãy chạy.
- sudo systemctl status sphinxsearch.service
Bạn sẽ nhận được một cái gì đó giống như sau.
Output● sphinxsearch.service - LSB: Fast standalone full-text SQL search engine Loaded: loaded (/etc/init.d/sphinxsearch; bad; vendor preset: enabled) Active: active (running) since Tue 2016-07-26 01:50:00 EDT; 15s ago . . .
Điều này cũng sẽ đảm bảo daemon Sphinx khởi động ngay cả khi server được khởi động lại.
Bước 6 - Kiểm tra
Bây giờ mọi thứ đã được cài đặt , hãy kiểm tra chức năng tìm kiếm. Kết nối với SphinxQL (trên cổng 9306) bằng giao diện MySQL. Dấu nhắc của bạn sẽ thay đổi thành mysql>
.
- mysql -h0 -P9306
Hãy tìm kiếm một câu.
- SELECT * FROM test1 WHERE MATCH('test document'); SHOW META;
Bạn sẽ nhận được một cái gì đó giống như sau.
Output+------+----------+------------+ | id | group_id | date_added | +------+----------+------------+ | 1 | 1 | 1465979047 | | 2 | 1 | 1465979047 | +------+----------+------------+ 2 rows in set (0.00 sec) +---------------+----------+ | Variable_name | Value | +---------------+----------+ | total | 2 | | total_found | 2 | | time | 0.000 | | keyword[0] | test | | docs[0] | 3 | | hits[0] | 5 | | keyword[1] | document | | docs[1] | 2 | | hits[1] | 2 | +---------------+----------+ 9 rows in set (0.00 sec)
Trong kết quả trên, bạn có thể thấy rằng Sphinx đã tìm thấy 2 kết quả phù hợp từ index test1
cho câu kiểm tra của ta . SHOW META;
lệnh cũng hiển thị số lần truy cập cho mỗi từ khóa trong câu.
Hãy tìm kiếm một số từ khóa.
- CALL KEYWORDS ('test one three', 'test1', 1);
Bạn sẽ nhận được một cái gì đó giống như sau.
Output+------+-----------+------------+------+------+ | qpos | tokenized | normalized | docs | hits | +------+-----------+------------+------+------+ | 1 | test | test | 3 | 5 | | 2 | one | one | 1 | 2 | | 3 | three | three | 0 | 0 | +------+-----------+------------+------+------+ 3 rows in set (0.00 sec)
Trong kết quả ở trên, bạn có thể thấy rằng trong index test1 , Sphinx đã tìm thấy:
- 5 đối sánh trong 3 tài liệu cho từ khóa 'kiểm tra'
- 2 đối sánh trong 1 tài liệu cho từ khóa 'một'
- 0 đối sánh trong 0 tài liệu cho từ khóa 'ba'
Đến đây bạn có thể rời khỏi MySQL shell.
- quit
Kết luận
Trong hướng dẫn này, ta đã chỉ cho bạn cách cài đặt Sphinx và thực hiện tìm kiếm đơn giản bằng SphinxQL và MySQL.
Bạn cũng có thể tìm thấy các triển khai SphinxAPI bản địa chính thức cho PHP, Perl, Python, Ruby và Java . Nếu bạn đang sử dụng Nodejs, bạn cũng có thể sử dụng gói SphinxAPI .
Bằng cách sử dụng Sphinx, bạn có thể dễ dàng thêm tìm kiếm tùy chỉnh vào trang web của bạn . Để biết thêm thông tin về cách sử dụng Sphinx, hãy truy cập trang web của dự án .
Các tin liên quan
Cách cài đặt và cấu hình Ansible trên Ubuntu 16.042016-07-22
Cách triển khai ứng dụng Node.js và MongoDB với Rancher trên Ubuntu 14.04
2016-07-18
Cách cài đặt và sử dụng BaasBox trên Ubuntu 14.04
2016-07-13
Cách thiết lập notebook Jupyter để chạy IPython trên Ubuntu 16.04
2016-06-15
Cách cài đặt Go 1.6 trên Ubuntu 16.04
2016-05-19
Cách cài đặt và sử dụng Composer trên Ubuntu 16.04
2016-05-17
Cách tập trung log với Rsyslog, Logstash và Elasticsearch trên Ubuntu 14.04
2016-05-16
Cách cài đặt và cấu hình Elasticsearch trên Ubuntu 16.04
2016-05-04
Cách cài đặt và cấu hình VNC trên Ubuntu 16.04
2016-04-26
Cách thêm không gian swap trên Ubuntu 16.04
2016-04-25