Thứ tư, 18/02/2015 | 00:00 GMT+7

Cách cài đặt và cấu hình Sphinx trên Ubuntu 14.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 14.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 .

Bước 1 - Cài đặt MySQL Server

Lưu ý: Bạn chỉ cần hoàn thành phần này nếu bạn chưa cài đặt server MySQL.

Trong phần này, ta sẽ cài đặt server MySQL. MySQL sẽ cho phép ta lưu trữ một database mẫu dữ liệu mà ta có thể sử dụng để kiểm tra khả năng tìm kiếm của Sphinx.

Cập nhật danh sách gói.

sudo apt-get update 

Sau đó cài đặt server MySQL.

sudo apt-get install mysql-server 

Nhập password cho user root khi được yêu cầu và nhập lại password đó để xác nhận.

Bước 2 - Cài đặt Sphinx

Trong phần này, ta sẽ cài đặt Sphinx.

Để cài đặt Sphinx, hãy chạy:

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 3 - Tạo Database Kiểm tra

Trong phần này, ta sẽ cài đặt database bằng cách sử dụng file SQL mẫu được cung cấp cùng với gói.

Hãy nhập một file SQL mẫu vào database .

Đăng nhập vào shell server MySQL.

mysql -u root -p 

Nhập password cho user root MyQL khi được hỏi. Dấu nhắc của bạn sẽ thay đổi thành mysql> .

Tạo một database có tên là test .

CREATE DATABASE test; 

Nhập file SQL.

SOURCE /etc/sphinxsearch/example.sql; 

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

quit 

Đến đây bạn sẽ có database thử nghiệm chứa đầy dữ liệu.

Bước 4 - Cấu hình Sphinx

Trong phần này, ta sẽ cấu hình file cấu hình Sphinx.

Tạo file sphinx.conf .

sudo nano /etc/sphinxsearch/sphinx.conf 

Cấu hình Sphinx bao gồm 3 khối chính cần thiết để chạy. Chúng là chỉ mục , tìm kiếmnguồn . Mỗi khối này được mô tả bên dưới và ở cuối bước này, toàn bộ sphinx.conf được bao gồm để bạn 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 truy vấn SQL 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.

  • 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 gốc
  • 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 : Đây là truy vấn kết xuất dữ liệu để lập index .
source src1 {   type          = mysql    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    sql_query_info        = SELECT * FROM documents WHERE id=$id }  

Thành phần chỉ mục chứa nguồn và đường dẫn để lưu trữ dữ liệu.

  • source : Tên của khối nguồn. Trong ví dụ của ta , đây là src1 .
  • path : path này để lưu index .
  • charset_type : Đây là bộ ký tự của index . Bạn cũng đặt điều này thành utf-8 .
index test1 {   source            = src1   path          = /var/lib/sphinxsearch/data/test1   docinfo           = extern   charset_type      = sbcs } 

Thành phần searchd chứa cổng và các biến khác để chạy trình Sphinx.

  • listen : Đây là cổng mà sphinx daemon sẽ chạy. Trong ví dụ của ta , đây là 9312.
  • query_log : Đường dẫn này để lưu log truy vấn.
  • pid_file : Đây là đường dẫn đến file PID của Sphinx daemon.
  • max_matches : Số lượng tối đa phù hợp để trả về cho mỗi cụm từ tìm kiếm.
  • 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ó hủy liên kết các bản sao index cũ khi xoay vòng thành công hay không.
searchd {   listen            = 9312   # Port to listen on   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   max_matches       = 1000   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à sql_pass trong khối nguồn, được đánh dấu.

source src1 {   type          = mysql    sql_host      = localhost   sql_user      = root   sql_pass      = password # change this to your root users 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    sql_query_info        = SELECT * FROM documents WHERE id=$id } index test1 {   source            = src1   path              = /var/lib/sphinxsearch/data/test1   docinfo           = extern   charset_type      = sbcs } searchd {   listen            = 9312   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   max_matches       = 1000   seamless_rotate   = 1   preopen_indexes   = 1   unlink_old        = 1   binlog_path       = /var/lib/sphinxsearch/data } 

Bước 5 - Thêm dữ liệu vào index

Trong phần này, ta sẽ thêm dữ liệu vào index Sphinx.

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.

Sphinx 2.0.4-id64-release (r3135) Copyright (c) 2001-2012, Andrew Aksyonoff Copyright (c) 2008-2012, Sphinx Technologies Inc (http://sphinxsearch.com)  using config file '/etc/sphinxsearch/sphinx.conf'... indexing index 'test1'... WARNING: collect_hits: mem_limit=0 kb too low, increasing to 25600 kb collected 4 docs, 0.0 MB sorted 0.0 Mhits, 100.0% done total 4 docs, 193 bytes total 0.005 sec, 33788 bytes/sec, 700.28 docs/sec total 3 reads, 0.000 sec, 0.1 kb/call avg, 0.0 msec/call avg total 9 writes, 0.000 sec, 0.1 kb/call avg, 0.0 msec/call avg 

Để giữ cho index được cập nhật, hãy tạo một cronjob.

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 .

Copy paste phần sau vào cuối file , sau đó lưu file .

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

Cronjob ở trên 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ặc định.

Bước 6 - Khởi động tượng Nhân sư

Trong phần này, ta sẽ khởi động daemon Sphinx.

Theo mặc định, daemon Sphinx bị tắt. Để bật Sphinx, trước tiên hãy mở /etc/default/sphinxsearch .

sudo nano /etc/default/sphinxsearch 

Tìm dòng START=no và đặt nó thành yes.

START=yes 

Sau đó, lưu file .

Cuối cùng, khởi động daemon Sphinx.

sudo service sphinxsearch start 

Trong phần này, ta sẽ kiểm tra tìm kiếm của bạn . Nhập lệnh sau.

search this is my test document number 

Bạn sẽ nhận được một cái gì đó giống như sau.

Sphinx 2.0.4-id64-release (r3135) Copyright (c) 2001-2012, Andrew Aksyonoff Copyright (c) 2008-2012, Sphinx Technologies Inc (http://sphinxsearch.com)  using config file '/etc/sphinxsearch/sphinx.conf'... index 'test1': query 'this is my test document number ': returned 2 matches of 2 total in 0.002 sec  displaying matches: 1. document=1, weight=7431, group_id=1, date_added=Tue Dec 16 09:49:04 2014 id=1 group_id=1 group_id2=5 date_added=2014-12-16 09:49:04 title=test one content=this is my test document number one. also checking search within phrases. 2. document=2, weight=7431, group_id=1, date_added=Tue Dec 16 09:49:04 2014 id=2 group_id=1 group_id2=6 date_added=2014-12-16 09:49:04 title=test two content=this is my test document number two  words: 1. 'this': 4 documents, 4 hits 2. 'is': 4 documents, 4 hits 3. 'my': 2 documents, 2 hits 4. 'test': 3 documents, 5 hits 5. 'document': 2 documents, 2 hits 6. 'number': 3 documents, 3 hits 

Ở trên, bạn có thể tìm thấy 2 kết quả phù hợp từ index thử nghiệm cho cụm từ tìm kiếm của ta . Bạn cũng có thể tìm các kết quả phù hợp cho mỗi từ.

Kết luận

Trong hướng dẫn này, ta đã chỉ cho bạn một tìm kiếm rất đơn giản bằng cách sử dụng dòng lệnh. 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 tại đây .

Nếu bạn đang sử dụng PHP, đây là một số ví dụ hữu ích để kiểm tra Sphinx.

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 .


Tags:

Các tin liên quan

Cách cài đặt MediaWiki trên Ubuntu 14.04
2015-02-06
Cách cài đặt phpBB trên Ubuntu 14.04
2015-02-04
Cách sử dụng puppet để quản lý chủ đề và plugin WordPress trên Ubuntu 14.04
2015-02-02
Giám sát LEMP với Monit trên Ubuntu 14.04
2015-01-26
Cách đồng bộ hóa lịch và danh bạ bằng chuẩn CardDAV và CalDAV với Baïkal trên Ubuntu 14.04
2015-01-23
Cách cài đặt Webmin với SSL trên Ubuntu 14.04
2015-01-19
Cách bắt đầu với Silex trên Ubuntu 14.04
2015-01-15
Cách triển khai ứng dụng DocPad trên Ubuntu 14.04
2015-01-14
Cách tạo một Playbook Ansible để tự động cài đặt Drupal trên Ubuntu 14.04
2014-12-23
Cách cài đặt Thư viện ảnh Piwigo trên Ubuntu 14.04
2014-12-18