MySQL 如何在Ubuntu 16.04上安装和设置Sphinx搜索引擎

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搜索可以处理数十亿个文档并处理数千个搜索查询,可以每秒执行。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程