MySQL 如何在Ubuntu 16.04上安装和设置Sphinx搜索引擎
在本文中,我们将学习如何在Ubuntu 16.04上安装和设置Sphinx搜索引擎。Sphinx是一个开源的搜索引擎,允许进行全文搜索,并在处理来自任何来源的大量数据时效果最佳(例如SQL数据库,纯文本文件等)。
阅读更多:MySQL 教程
Sphinx的特点
- 高级索引和查询工具。
-
高效率的搜索和索引。
-
后处理高级结果。
-
容易扩展和高级搜索。
-
可以与SQL和XML源集成。
-
可扩展以处理数千个查询的大量数据。
先决条件
在开始之前,我们需要准备一些先决条件:
- 具有sudo权限的Ubuntu机器上的非root用户。
-
在机器上安装了MySQL。
安装Sphinx
我们可以使用Ubuntu的本地包存储库直接安装Sphinx,以下是安装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 <http://in.archive.ubuntu.com/ubuntuxenial/universe> amd64 libstemmer0d amd 64 0+svn585-1 [62.1 kB]
Get:2 <http://in.archive.ubuntu.com/ubuntuxenial-updates/main> amd64 libmysqlclie nt20 amd64 5.7.15-0ubuntu0.16.04.1 [809 kB]
Get:3 <http://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) ...
为Sphinx创建测试数据库
现在,我们需要使用默认附带的样本数据创建一个测试数据库,这将允许您在后续步骤中测试Sphinx搜索。
让我们登录MySQL,我们将在其中创建测试数据库并导入样本数据库。
$ mysql –u root –p
mysql> create database test;
Query OK,1行受影响(0.01秒)
mysql> SOURCE /etc/sphinxsearch/example.sql;
Query OK,0行受影响,1个警告(0.01秒)
Query OK,0行受影响(0.03秒)
Query OK,4行受影响(0.01秒)
记录数:4 重复:0 警告:0
Query OK,0行受影响,1个警告(0.00秒)
Query OK,0行受影响(0.00秒)
Query OK,10行受影响(0.01秒)
记录数:10 重复:0 警告:0
Mysql> quit
为搜索配置Sphinx
在Sphinx中,我们需要编辑和配置3个主要块,以适应我们定义索引、搜索和源的环境,它们位于配置文件sphinx.conf中,该文件位于/等/sphinxsearch/sphinx.conf.sample文件夹中,因此我们需要将现有的示例配置文件复制到/等/sphinxsearch文件夹中。
$ cp /etc/sphinxsearch/sphinx.conf.sample /etc/sphinxsearch/sphinx.conf
$ sudo vi /etc/sphoxsearch/sphinx.conf
配置文件应如下所示,具有块
在sphinx.conf中的源块
source src1
{
type = mysql
#SQL设置(适用于“mysql”和“pgsql”类型)
sql_host = localhost
sql_user = roo
tsql_pass = ubuntu
sql_db = test
sql_port = 3306 # 可选,默认是3306
sql_query = \
SELECT id,group_id,UNIX_TIMESTAMP(date_added)作为date_added,title,content \
FROM documents
sql_attr_uint = group_id
sql_attr_timestamp = date_added
}
在sphinx.conf中的索引块
index test
{
source = src1
path = /var/lib/sphinxsearch/data/test
docinfo = extern
}
在sphinx.conf中的搜索块
searchd
{
listen = 9312:sphinx # SphinxAPI端口
listen = 9306:mysql41 # SphinxQL端口
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
}
一旦我们编辑了配置,我们需要对Sphinx进行索引。
在Sphinx上管理索引
在这里,我们将使用我们在早期步骤中编辑的配置文件进行索引。
$ sudo indexer –all
Sphinx 2.2.9-id64-release(rel22-r5006)
版权所有(c)2001-2015,Andrew Aksyonoff
版权所有(c)2008-2015,Sphinx Technologies Inc(http://sphinxsearch.com)
使用配置文件' / etc / sphinxsearch / sphinx.conf '...
索引索引'test'...
收集4个文档,0.0 MB
排序0.0 Mhits,完成100.0%
总共4个文件,193个字节
总0.007秒,24319字节/秒,504.03文档/秒
总共4个读取,0.000秒,0.1 kb / call avg,0.0 msec / call avg
总12个写入,0.000秒,0.1 kb/call avg,0.0 msec/call avg
在生产环境中,我们需要保持索引最新,因此我们将创建一个cronjob –
$ crontab –e
在文件结尾添加以下内容。
# 编辑此文件以介绍要由cron运行的任务。
#
# 每个运行的任务必须通过单行定义
# 指示任务何时运行的不同字段
# 以及要运行的任务命令
#
# 要定义时间,您可以提供具体值
# 分钟(m),小时(h),每月的日期(dom),月(mon),
# 和星期几(dow)或在这些字段中使用'*'(用于“任意”)。
# 请注意,基于cron系统的时间和时区,将启动任务。
#
# crontab作业的输出(包括错误)将通过电子邮件发送到crontab文件所属的用户(除非重定向)。
#
# 例如,您可以在每周的5点进行所有用户帐户的备份:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
# 有关更多信息,请参见crontab(5)和cron(8)的手册页面
#
# m h dom mon dow command
@hourly /usr/bin/indexer --rotate --config /etc/sphinxsearch/sphinx.conf –all
启动Sphinx服务
由于我们已使用配置文件配置了索引,因此现在需要编辑Sphinx配置文件。默认情况下,Sphinx守护程序未启动,我们需要编辑此文件 /etc/default/sphinxsearch
$ vi /etc/default/sphinxsearch
#
# sphinxsearch搜寻守护进程的设置
# 请阅读/usr/share/doc/sphinxsearch/README.Debian获取详细信息。
#
# sphinxsearch是否应在启动时自动运行?(默认值:不)
# 在执行此操作之前,您可能需要修改/etc/sphinxsearch/sphinx.conf
# 以使其适用于您。
START=yes
以下是启动Sphinx守护进程的命令
$ sudo systemctl restart sphinxsearch.services
一旦我们重新启动sphinxsearch服务,就可以使用以下命令检查状态
$ sudo systemctl status sphinxsearch.service
sphinxsearch.service - LSB:快速独立全文SQL搜索引擎
已加载:已加载(/etc/init.d/sphinxsearch;坏的;供应商预设:启用)
积极:自2016-09-19 13:00:20 IST活动;1小时10分钟前
文档:man:systemd-sysv-generator(8)
任务:0(限制为512)
内存:0B
CPU:0
Sep 19 13:00:20 ubuntu-16 systemd[1]:正在启动LSB:快速独立全文SQL搜索引擎...
Sep 19 13:00:20 ubuntu-16 sphinxsearch[7804]:要启用sphinxsearch,请编辑/ etc/default/sphinxsearch并将START = ye设置为
Sep 19 13:00:20 ubuntu-16 systemd[1]:已启动LSB:快速独立全文SQL搜索引擎。
测试Sphinx搜索
现在,我们将使用MySQL接口使用端口9306连接到SphinxQL。
$ mysql -h0 -P9306
欢迎来到MySQL监视器。命令以;或\ g结尾。
您的MySQL连接ID为1
服务器版本:2.2.9-id64-release(rel22-r5006)
版权所有(c)2000,2016,Oracle及其各自的附属公司。保留所有权利。
Oracle是Oracle Corporation和/或其
附属公司的注册商标。其他名称可能是其各自的商标
所有者。
输入'help;'或'\h'获取帮助。输入'\ c'以清除当前输入语句。
mysql>
在数据库中搜索单词“test”
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)
通过使用设置和配置,我们可以将Sphinx配置为一个功能强大的搜索引擎,其效率更高,可以处理海量数据。Sphinx搜索可以处理数十亿个文档并处理数千个搜索查询,可以每秒执行。
极客教程