Trong bài viết này, chúng ta sẽ tìm hiểu về cách cài đặt và thiết lập Sphinx trên Ubunt 16.04, Sphinx là một công cụ tìm kiếm mã nguồn mở cho phép tìm kiếm thử nghiệm đầy đủ và tốt nhất trong việc thực hiện tìm kiếm với dữ liệu khổng lồ rất hiệu quả nơi dữ liệu có thể lấy từ bất kỳ nguồn nào, (Ví dụ - Cơ sở dữ liệu SQL, tệp văn bản thuần túy, v.v.,)
Đặc điểm của tượng Nhân sư
-
Chỉ mục nâng cao và công cụ tốt để truy vấn.
-
Hiệu suất và chỉ mục Tìm kiếm cao.
-
Kết quả trước cho quá trình xử lý sau.
-
Dễ dàng mở rộng với các tìm kiếm nâng cao.
-
Có thể được tích hợp với các nguồn SQL và XML.
-
Có thể mở rộng để cung cấp dữ liệu khổng lồ với hàng nghìn truy vấn.
Điều kiện tiên quyết
Trước khi bắt đầu, chúng tôi cần một số điều kiện tiên quyết.
-
Chúng tôi cần một máy Ubuntu với người dùng không phải root có quyền sudo trên máy.
-
MySQL được cài đặt trên máy.
Cài đặt tượng Nhân sư trên máy
Chúng ta có thể cài đặt trực tiếp Sphinx bằng cách sử dụng kho gói gốc của Ubuntu bằng cách sử dụng apt-get, dưới đây là lệnh để cài đặt Sphinx.
$ sudo apt-get install sphinxsearch Reading package lists... Done Building dependency tree Reading state information... Done The following additional packages will be installed: libmysqlclient20 libstemmer0d The following NEW packages will be installed: libmysqlclient20 libstemmer0d sphinxsearch 0 upgraded, 3 newly installed, 0 to remove and 92 not upgraded. Need to get 2,608 kB of archives. After this operation, 20.5 MB of additional disk space will be used. Do you want to continue? [Y/n] y Get:1 https://in.archive.ubuntu.com/ubuntuxenial/universe amd64 libstemmer0d amd 64 0+svn585-1 [62.1 kB] Get:2 https://in.archive.ubuntu.com/ubuntuxenial-updates/main amd64 libmysqlclie nt20 amd64 5.7.15-0ubuntu0.16.04.1 [809 kB] Get:3 https://in.archive.ubuntu.com/ubuntu xenial/universe amd64 sphinxsearch amd 64 2.2.9-1build1 [1,737 kB] Fetched 2,608 kB in 2s (986 kB/s) Selecting previously unselected package libstemmer0d:amd64. (Reading database ... 117542 files and directories currently installed.) Preparing to unpack .../libstemmer0d_0+svn585-1_amd64.deb ... Unpacking libstemmer0d:amd64 (0+svn585-1) ... Selecting previously unselected package libmysqlclient20:amd64. Preparing to unpack .../libmysqlclient20_5.7.15-0ubuntu0.16.04.1_amd64.deb ... Unpacking libmysqlclient20:amd64 (5.7.15-0ubuntu0.16.04.1) ... Selecting previously unselected package sphinxsearch. Preparing to unpack .../sphinxsearch_2.2.9-1build1_amd64.deb ... Unpacking sphinxsearch (2.2.9-1build1) ... Processing triggers for libc-bin (2.23-0ubuntu3) ... Processing triggers for ureadahead (0.100.0-19) ... Processing triggers for systemd (229-4ubuntu4) ... Setting up libstemmer0d:amd64 (0+svn585-1) ... Setting up libmysqlclient20:amd64 (5.7.15-0ubuntu0.16.04.1) ... Setting up sphinxsearch (2.2.9-1build1) ... Adding system user `sphinxsearch' (UID 119) ... Adding new group `sphinxsearch' (GID 125) ... Adding new user `sphinxsearch' (UID 119) with group `sphinxsearch' ... Not creating home directory `/var/run/sphinxsearch'. Processing triggers for libc-bin (2.23-0ubuntu3) ... Processing triggers for ureadahead (0.100.0-19) ... Processing triggers for systemd (229-4ubuntu4) ...
Tạo cơ sở dữ liệu thử nghiệm cho Sphinx
Bây giờ, chúng tôi phải tạo một cơ sở dữ liệu thử nghiệm bằng cách sử dụng dữ liệu mẫu đi kèm với gói theo mặc định, điều này sẽ cho phép bạn kiểm tra việc tìm kiếm Nhân sư trong các bước sau.
Hãy để chúng tôi đăng nhập vào MySQL, nơi chúng tôi sẽ tạo cơ sở dữ liệu thử nghiệm và nhập cơ sở dữ liệu mẫu.
$ mysql –u root –p mysql> create database test; Query OK, 1 row affected (0.01 sec) mysql> SOURCE /etc/sphinxsearch/example.sql; Query OK, 0 rows affected, 1 warning (0.01 sec) Query OK, 0 rows affected (0.03 sec) Query OK, 4 rows affected (0.01 sec) Records: 4 Duplicates: 0 Warnings: 0 Query OK, 0 rows affected, 1 warning (0.00 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 10 rows affected (0.01 sec) Records: 10 Duplicates: 0 Warnings: 0 Mysql> quit
Định cấu hình tượng Nhân sư để tìm kiếm
Trong Sphinx, chúng ta cần chỉnh sửa và định cấu hình 3 khối chính để phù hợp với môi trường của chúng ta, nơi các yếu tố cần thiết như chỉ mục, tìm kiếm và nguồn được xác định, chúng được tìm thấy trong tệp cấu hình sphinx.conf, nằm tại / etc / sphinxsearch / sphinx. tệp conf.sample mà chúng tôi cần sao chép tệp cấu hình mẫu hiện có vào thư mục / etc / sphinxsearch
$ cp /etc/sphinxsearch/sphinx.conf.sample /etc/sphinxsearch/sphinx.conf $ sudo vi /etc/sphoxsearch/sphinx.conf
Tệp cấu hình sẽ giống như bên dưới với các khối
Khối nguồn trong sphinx.conf
source src1 { type = mysql #SQL settings (for ‘mysql’ and ‘pgsql’ types) sql_host = localhost sql_user = roo tsql_pass = ubuntu 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 }
Khối lập chỉ mục trong sphinx.conf
index test { source = src1 path = /var/lib/sphinxsearch/data/test docinfo = extern } Searchd block in sphinx.conf searchd { listen = 9312:sphinx #SphinxAPI port listen = 9306:mysql41 #SphinxQL port 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 }
Một lần, chúng tôi chỉnh sửa cấu hình chúng tôi cần để lập chỉ mục tượng Nhân sư.
Quản lý các chỉ mục trên Sphinx
Tại đây, chúng tôi sẽ lập chỉ mục bằng cách sử dụng các tệp cấu hình mà chúng tôi đã chỉnh sửa trong các bước trước đó
$ sudo indexer –all Sphinx 2.2.9-id64-release (rel22-r5006) Copyright (c) 2001-2015, Andrew Aksyonoff Copyright (c) 2008-2015, Sphinx Technologies Inc (https://sphinxsearch.com) using config file '/etc/sphinxsearch/sphinx.conf'... indexing index 'test'... collected 4 docs, 0.0 MB sorted 0.0 Mhits, 100.0% done total 4 docs, 193 bytes total 0.007 sec, 24319 bytes/sec, 504.03 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 sản xuất, chúng tôi cần cập nhật chỉ mục nên chúng tôi sẽ tạo cronjob cho việc này -
$ crontab –e
Thêm phần sau vào cuối tệp.
# Edit this file to introduce tasks to be run by cron. # # Each task to run has to be defined through a single line # indicating with different fields when the task will be run # and what command to run for the task # # To define the time you can provide concrete values for # minute (m), hour (h), day of month (dom), month (mon), # and day of week (dow) or use '*' in these fields (for 'any').# # Notice that tasks will be started based on the cron's system # daemon's notion of time and timezones. # # Output of the crontab jobs (including errors) is sent through # email to the user the crontab file belongs to (unless redirected). # # For example, you can run a backup of all your user accounts # at 5 a.m every week with: # 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/ # # For more information see the manual pages of crontab(5) and cron(8) # # m h dom mon dow command @hourly /usr/bin/indexer --rotate --config /etc/sphinxsearch/sphinx.conf –all
Khởi động Dịch vụ Nhân sư
Vì chúng tôi đã định cấu hình chỉ mục bằng cách sử dụng tệp cấu hình mà chúng tôi hiện cần để chỉnh sửa tệp cấu hình Sphinx, theo mặc định, daemon Sphinx không được khởi động, chúng tôi cần chỉnh sửa tệp trong này / etc / default / sphinxsearch
$ vi /etc/default/sphinxsearch # # Settings for the sphinxsearch searchd daemon # Please read /usr/share/doc/sphinxsearch/README.Debian for details. # # Should sphinxsearch run automatically on startup? (default: no) # Before doing this you might want to modify /etc/sphinxsearch/sphinx.conf # so that it works for you. START=yes
Dưới đây là lệnh gắn dấu sao cho Sphinx Daemon
$ sudo systemctl restart sphinxsearch.services
Khi chúng tôi khởi động lại các dịch vụ sphinxsearch, chúng tôi sẽ kiểm tra trạng thái bằng lệnh dưới đây
$ sudo systemctl status sphinxsearch.service sphinxsearch.service - LSB: Fast standalone full-text SQL search engine Loaded: loaded (/etc/init.d/sphinxsearch; bad; vendor preset: enabled) Active: active (exited) since Mon 2016-09-19 13:00:20 IST; 1h 10min ago Docs: man:systemd-sysv-generator(8) Tasks: 0 (limit: 512) Memory: 0B CPU: 0 Sep 19 13:00:20 ubuntu-16 systemd[1]: Starting LSB: Fast standalone full-text SQL search engine... Sep 19 13:00:20 ubuntu-16 sphinxsearch[7804]: To enable sphinxsearch, edit /etc/default/sphinxsearch and set START=ye Sep 19 13:00:20 ubuntu-16 systemd[1]: Started LSB: Fast standalone full-text SQL search engine.
Kiểm tra Tìm kiếm Nhân sư
Bây giờ chúng ta sẽ kết nối với SphinxQL bằng cổng 9306 bằng giao diện MySQL.
$ mysql -h0 -P9306 Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 1 Server version: 2.2.9-id64-release (rel22-r5006) Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql>
Tìm kiếm một từ “kiểm tra” trong Cơ sở dữ liệu
mysql> SELECT * FROM test WHERE MATCH('test '); SHOW META; +------+----------+------------+ | id | group_id | date_added | +------+----------+------------+ | 1 | 1 | 1474272578 | | 2 | 1 | 1474272578 | | 4 | 2 | 1474272578 | +------+----------+------------+ 3 rows in set (0.00 sec) +---------------+-------+ | Variable_name | Value | +---------------+-------+ | total | 3 | | total_found | 3 | | time | 0.000 | | keyword[0] | test | | docs[0] | 3 | | hits[0] | 5 | +---------------+-------+ 6 rows in set (0.00 sec)
Bằng cách sử dụng thiết lập và cấu hình, chúng tôi có thể định cấu hình Sphinx như một công cụ tìm kiếm mạnh mẽ, hiệu quả hơn và có thể xử lý dữ liệu khổng lồ, tìm kiếm nhân sư có thể xử lý hàng tỷ tài liệu và có thể xử lý hàng chục terabyte dữ liệu trong đó hàng nghìn truy vấn tìm kiếm có thể được thực thi mỗi thứ hai.