NỘI DUNG

Hosting tốc độ cao Vietnix - tốc độ tải trang trung bình dưới 1 giây
VPS siêu tốc Vietnix - trải nghiệm mượt mà, ổn định
11/06/2023
Lượt xem

Hướng dẫn cài đặt và cấu hình Sphinx trên CentOS 7

11/06/2023
14 phút đọc
Lượt xem

Đánh giá

5/5 - (109 bình chọn)

Sphinx là một công cụ tìm kiếm mã nguồn mở, cho phép tìm kiếm full-text. Sphinx rất hiệu quả cho quá trình tìm kiếm trên cơ sở dữ liệu lớn. Dữ liệu được index có thể đến từ nhiều nguồn khác nhau như cơ sở dữ liệu SQL, file văn bản thuần túy, file HTML, hộp thư,… Trong bài viết này, bạn sẽ được hướng dẫn cài đặt và cấu hình Sphinx trên CentOS 7.

Bước 1: Cài đặt Sphinx

Để làm theo hướng dẫn này, bạn cần một máy chủ CentOS 7 đã cài đặt MySQL và non-root user được cấp quyền sudo. Tìm hiểu bài viết cách cài đặt MySQL trên CentOS 7 để biết cách cài đặt hiệu quả.

Hướng dẫn này cài đặt phiên bản Sphinx 2.2.11. Bạn có thể truy cập vào website của Sphinx để cập nhật phiên bản mới nhất.

Trước khi cài đặt Sphinx, bạn nên cài đặt các thành phần liên quan bằng lệnh sau:

sudo yum install -y postgresql-libs unixODBC

Di chuyển đến thư mục tmp để tải xuống các file của Sphinx:

cd /tmp

Tải xuống phiên bản mới nhất của Sphinx bằng cách sử dụng tiện ích wget.

wget http://sphinxsearch.com/files/sphinx-2.2.11-1.rhel7.x86_64.rpm

Cuối cùng, cài đặt Sphinx bằng lệnh sau:

sudo yum install -y sphinx-2.2.11-1.rhel7.x86_64.rpm

Bây giờ bạn đã cài đặt thành công Sphinx trên máy chủ của mình. Bạn cần cấu hình Sphinx trước khi chạy Sphinx daemon.

Bước 2: Tạo cơ sở dữ liệu thử nghiệm

Trong bước này, bạn sẽ thiết lập cơ sở dữ liệu bằng cách sử dụng dữ liệu mẫu trong file SQL được cung cấp cùng với package. Điều này cho phép kiểm tra tìm kiếm Sphinx có hoạt động hay không.

Nhập file SQL mẫu vào cơ sở dữ liệu. Đầu tiên, đăng nhập vào server shell MySQL:

$ mysql -u root -p

Nhập mật khẩu cho root user MySQL khi có thông báo. Prompt của bạn sẽ thay đổi thành MariaDB>.

Tạo một cơ sở dữ liệu giả, ở đây sử dụng test. Bạn có thể thay test bằng một tên tùy ý:

CREATE DATABASE test;

Nhập file SQL mẫu:

SOURCE /usr/share/doc/sphinx-2.2.11/example.sql;

Sau đó thoát khỏi MySQL shell.

quit

Khi đã có một cơ sở dữ liệu chứa toàn dữ liệu mẫu, bạn sẽ tùy chỉnh cấu hình của Sphinx.

Để có thể lưu trữ cơ sở dữ liệu theo thời gian sử dụng lâu dài, bạn cần có một máy chủ với khả năng nâng cấp, mở rộng tài nguyên linh hoạt. VPS NVMe là giải pháp tối ưu nhất trong trường hợp này. Các gói dịch vụ VPS của Vietnix bao gồm VPS NVMe, VPS Giá Rẻ, VPS Phổ Thông, VPS Cao Cấp, VPS GPU với cấu hình và mức giá linh hoạt để phù hợp với những nhu cầu khác nhau của cá nhân, doanh nghiệp.
Một số ưu điểm của VPS của Vietnix bao gồm độ ổn định cao, tốc độ truy cập nhanh, chất lượng dịch vụ tốt, hỗ trợ nhanh chóng và chuyên nghiệp. Liên hệ với Vietnix để được tư vấn chi tiết về các gói dịch vụ mà bạn quan tâm.

Bước 3: Cấu hình Sphinx

Các cấu hình của Sphinx sẽ nằm trong file sphinx.cnf ở thu mục /etc/sphinx. Cấu hình bao gồm 3 block chính là index, searchdsource. Ban đầu khi cài đặt hệ thống sẽ cung cấp cho người dùng cấu hình đơn giản, nhưng trong bài này bạn sẽ tuỳ chỉnh một file cấu hình mới để sử dụng cũng như hiểu được từng bước thực hiện.

Đầu tiên, đổi tên file cấu hình hiện có bằng lệnh sau:

$ sudo mv /etc/sphinx/sphinx.conf /etc/sphinx/sphinx.conf2

Tạo một file sphinx.conf mới bằng vi hoặc trình soạn thảo khác tùy ý:

$ sudo vi /etc/sphinx/sphinx.conf

Mỗi block index, searchd source được mô tả bên dưới, và bạn sẽ sao chép toàn bộ cấu hình của ba block để dán vào file cấu hình.

Block source chứa nguồn, username và password cho server SQL. 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ả từng trường của block source:

  • type: Nguồn dữ liệu để lập index, bài viết này sử dụng mysql. Ngoài ra bạn có thể sử dụng pssql, mssql, xmlpipe2, odbc,…
  • sql_host: Hostname cho host MySQL, bài viết này sử dụng localhost. sql_host có thể là domain hoặc địa chỉ IP.
  • sql_user: Username để đăng nhập MySQL, bài viết này sử dụng username là root.
  • sql_pass: Mật khẩu cho user MySQL. Bài viết này sử dụng password của root user MySQL.
  • sql_db: Tên của database lưu trữ dữ liệu, ở đây database là test.
  • sql_query: Truy vấn chuyển dữ liệu từ cơ sở dữ liệu sang index.

Đây là block source:

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 index chứa source và đường dẫn để lưu trữ dữ liệu:

  • source: Tên của block source, bài viết này sử dụng tên src1.
  • path: Đường dẫn lưu index.
index test1 {   source		= src1   path			= /var/lib/sphinx/test1   docinfo		= extern }

Thành phần searchd chứa port và các biến khác để chạy daemon Sphinx:

  • listen: Port mà Sphinx daemon sẽ chạy. Tiếp theo là giao thức, ở đây listen là 9306:mysql41. Các giao thức đã biết là :sphinx (SphinxAPI) và :mysql41 (SphinxQL).
  • query_log: Đường dẫn lưu query log.
  • pid_file: Đường dẫn đến file PID của Sphinx daemon.
  • seamless_rotate: Ngăn chặn các searchd stall trong khi xoay các index có dữ liệu khổng lồ vào precache.
  • preopen_indexes: Các index có bắt buộc phải mở trước khi khởi động hay không.
  • unlink_old: Các bản sao index cũ có cần xóa 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/sphinx/searchd.log   query_log			= /var/log/sphinx/query.log   read_timeout		= 5   max_children		= 30   pid_file			= /var/run/sphinx/searchd.pid   seamless_rotate	= 1   preopen_indexes	= 1   unlink_old		= 1   binlog_path		= /var/lib/sphinx/ }

Cấu hình đầy đủ để sao chép và dán ở bên dưới. Biến duy nhất cần được thay đổi là sql_pass trong block source.

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/sphinx/test1   docinfo			= extern } searchd {   listen			= 9306:mysql41   log				= /var/log/sphinx/searchd.log   query_log			= /var/log/sphinx/query.log   read_timeout		= 5   max_children		= 30   pid_file			= /var/run/sphinx/searchd.pid   seamless_rotate	= 1   preopen_indexes	= 1   unlink_old		= 1   binlog_path		= /var/lib/sphinx/ }

Để xem thêm các cấu hình, bạn có thể truy cập vào file /usr/share/doc/sphinx-2.2.11/sphinx.conf.dist, file này chứa tất cả các biến được giải thích chi tiết.

Bước 4: Quản lý index

Trong bước này, bạn sẽ thêm dữ liệu vào index Sphinx và đảm bảo index 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 mà bạn đã tạo trước đó:

sudo indexer --all

Bạn sẽ nhận được output sau:

Output Sphinx 2.2.11-id64-release (95ae9a6) Copyright (c) 2001-2016, Andrew Aksyonoff Copyright (c) 2008-2016, Sphinx Technologies Inc (http://sphinxsearch.com)  using config file '/etc/sphinx/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.006 sec, 29765 bytes/sec, 616.90 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 triển khai, cần phải cập nhật index. Để làm điều này, hãy tạo một Cron job. Đầu tiên, mở crontab:

crontab -e

Cron job sẽ chạy định kì mỗi 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à bạn đã tạo trước đó. Sao chép và dán crontab vào cuối file, sau đó lưu và đóng file.

@hourly /usr/bin/indexer --rotate --config /etc/sphinx/sphinx.conf --all

Khi Sphinx đã được thiết lập và cấu hình đầy đủ, bạn có thể bắt đầu dùng thử.

Bước 5: Khởi động Sphinx

Sử dụng systemctl để khởi động daemon Sphinx:

$ sudo systemctl start searchd

Để kiểm tra Sphinx daemon có chạy đúng không, hãy sử dụng lệnh:

$ sudo systemctl status searchd

Bạn sẽ nhận được output sau:

Output ●  searchd.service - SphinxSearch Search Engine    Loaded: loaded (/usr/lib/systemd/system/searchd.service; disabled; vendor preset: disabled)    Active: active (running) since Fri 2016-08-19 17:48:39 UTC; 5s ago    . . .

Sphinx đã được cấu hình và đang hoạt động, tiếp theo bạn sẽ kiểm tra xem Sphinx có hoạt động bình thường hay không.

Bước 6: Kiểm tra chức năng tìm kiếm

Khi đã thiết lập cấu hình, hãy kiểm tra chức năng tìm kiếm. Kết nối với Sphinx bằng MySQL interface. Prompt 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 kết quả 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 output trên, bạn có thể thấy Sphinx đã tìm thấy 2 kết quả phù hợp từ index test1 cho câu kiểm tra. Lệnh SHOW META cũng hiển thị số lần truy cập của 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 kết quả 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)

Từ output trên, bạn có thể thấy trong index test1, Sphinx đã tìm thấy:

  • 5 kết quả phù hợp trong 3 tài liệu cho từ khóa “test”.
  • 2 kết quả phù hợp trong 1 tài liệu cho từ khóa “one”.
  • Không có kết quả phù hợp cho từ khóa “three”.

Khi đã hoàn tất thử nghiệm Sphinx, bạn có thể xóa cơ sở dữ liệu thử nghiệm DROP DATABASE test ; nếu muốn. Sau đó thoát khỏi MySQL shell bằng lệnh:

quit

Nếu bạn đang gặp phải các vấn đề khi thực hiện các thao tác trên hoặc cảm thấy chúng quá phức tạp, đừng lo lắng. Bạn có thể sử dụng dịch vụ VPS của Vietnix để được hỗ trợ cài đặt một cách nhanh chóng và dễ dàng hơn. Với hơn 11 năm kinh nghiệm và hơn 50.000 khách hàng cá nhân và doanh nghiệp đã tin tưởng sử dụng dịch vụ, Vietnix là một trong những nhà cung cấp giải pháp lưu trữ hàng đầu tại Việt Nam.

Ngoài ra, Vietnix còn là đối tác tin cậy của nhiều khách hàng lớn như GTV, UB Group, iVIVU, Vietnamworks, SEOSONA, SAGO Media,… với hơn 100.000 dịch vụ được kích hoạt. Vietnix luôn cam kết mang lại cho khách hàng sự hài lòng tuyệt đối với các dịch vụ chất lượng cao và tiện ích đa dạng. Còn chần chờ gì mà không đăng ký trải nghiệm dịch vụ của Vietnix ngay hôm nay.

Mọi vấn đề thắc mắc cần tư vấn, quý khách vui lòng liên hệ:

  • Địa chỉ: 265 Hồng Lạc, Phường 10, Quận Tân Bình, Thành Phố Hồ Chí Minh.
  • Hotline: 1800 1093.
  • Email: sales@vietnix.com.vn.

Trong hướng dẫn này, bạn đã hoàn tất cài đặt Sphinx và thực hiện tìm kiếm đơn giản bằng SphinxQL và MySQL. Chúc các bạn cài đặt thành công và có thể ứng dụng Sphinx để tìm kiếm tùy chỉnh trên trang web của mình. Ngoài ra, đừng quên theo dõi các bài viết tiếp theo của Vietnix để cập nhật thêm các mẹo sử dụng công cụ này.

THEO DÕI VÀ CẬP NHẬT CHỦ ĐỀ BẠN QUAN TÂM

Đăng ký ngay để nhận những thông tin mới nhất từ blog của chúng tôi. Đừng bỏ lỡ cơ hội truy cập kiến thức và tin tức hàng ngày

Chọn chủ đề :

Hưng Nguyễn

Co-Founder
tại

Kết nối với mình qua

Kết nối với mình qua

Theo dõi
Thông báo của
guest
0 Comments
Phản hồi nội tuyến
Xem tất cả bình luận

Tăng tốc độ website - Nâng tầm giá trị thương hiệu

Tăng tốc tải trang

95 điểm

Nâng cao trải nghiệm người dùng

Tăng 8% tỷ lệ chuyển đổi

Thúc đẩy SEO, Google Ads hiệu quả

Tăng tốc ngay

SẢN PHẨM NỔI BẬT

7 NGÀY DÙNG THỬ HOSTING

NẮM BẮT CƠ HỘI, THÀNH CÔNG DẪN LỐI

Cùng trải nghiệm dịch vụ hosting tốc độ cao được hơn 100,000 khách hàng sử dụng

ĐĂNG KÝ NHẬN TÀI LIỆU THÀNH CÔNG
Cảm ơn bạn đã đăng ký nhận tài liệu mới nhất từ Vietnix!
ĐÓNG

ĐĂNG KÝ DÙNG THỬ HOSTING

7 NGÀY MIỄN PHÍ

ĐĂNG KÝ DÙNG THỬ HOSTING

7 NGÀY MIỄN PHÍ

XÁC NHẬN ĐĂNG KÝ DÙNG THỬ THÀNH CÔNG
Cảm ơn bạn đã đăng ký thông tin thành công. Đội ngũ CSKH sẽ liên hệ trực tiếp để kích hoạt dịch vụ cho bạn nhanh nhất!
ĐÓNG