专栏首页云计算教程系列如何在CentOS 7上安装和配置Sphinx
原创

如何在CentOS 7上安装和配置Sphinx

介绍

Sphinx是一个开源搜索引擎,允许全文搜索。众所周知,它能非常有效地对大数据进行搜索。要编制索引的数据通常来自非常不同的来源:SQL数据库,纯文本文件,HTML文件,邮箱等。

Sphinx的一些主要功能包括:

  • 高索引和搜索性能
  • 高级索引和查询工具
  • 高级结果集后处理
  • 经证实可扩展性高达数十亿个文档,数TB数据和每秒数千个查询
  • 易于与SQL和XML数据源以及SphinxQL,SphinxAPI或SphinxSE搜索界面集成
  • 使用分布式搜索轻松扩展

在本教程中,我们将使用分发包中包含的示例SQL文件设置Sphinx和MySQL服务器。它将为您提供有关如何将Sphinx用于您的项目的基本知识。

准备

在开始本指南之前,您需要:

  • 一台CentOS 7服务器。没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后再购买服务器
  • 一个可使用sudo权限的非root用户。
  • 将MySQL安装在您的服务器上。如果您在生产环境使用,我建议您直接使用云关系型数据库,云关系型数据库让您在云中轻松部署、管理和扩展的关系型数据库,提供安全可靠、伸缩灵活的按需云数据库服务。腾讯云关系型数据库提供 MySQL、SQL Server、MariaDB、PostgreSQL 数据库引擎,并针对数据库引擎的性能进行了优化。

第1步 - 安装Sphinx

您可以在Sphinx网站上找到最新版本。

在安装Sphinx之前,首先需要安装它的依赖项。

sudo yum install -y postgresql-libs unixODBC

移动到tmp目录,在一个不显眼的地方下载Sphinx的文件。

cd /tmp

使用wget下载最新的Sphinx版本。

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

最后,使用yum安装它。

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

现在,您已在服务器上成功安装了Sphinx。在启动Sphinx守护程序之前,让我们配置它。

第2步 - 创建测试数据库

在这里,我们将使用随包提供的SQL文件中的示例数据来设置数据库。这将允许我们测试Sphinx搜索是否在以后工作。

让我们将示例SQL文件导入数据库。首先,登录MySQL服务器shell。

mysql -u root -p

在询问时输入MySQL root用户的密码。您的提示将更改为MariaDB>

创建一个虚拟数据库。在这里,我们称之为测试,但您可以根据需要命名。

CREATE DATABASE test;

导入示例SQL文件。

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

然后离开MySQL shell。

quit

现在您有一个填充了示例数据的数据库。接下来,我们将自定义Sphinx的配置。

第3步 - 配置Sphinx

Sphinx的配置应该在/etc/sphinx中一个名为sphinx.conf的文件中。配置由3个主要块组成:索引搜索

已经提供了最小配置,但我们将提供一个新的示例配置文件供您使用并解释每个部分,以便您以后可以自定义。

首先,移动现有sphinx.conf文件。

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

使用vi或您喜欢的文本编辑器创建一个新文件sphinx.conf

sudo vi /etc/sphinx/sphinx.conf

下面依次描述索引搜索块。然后,在此步骤结束时,包含sphinx.conf的整个内容将供您复制并粘贴到文件中。

块包含源,用户名和密码的MySQL服务器的类型。sql_query的第一列应该是唯一的id。SQL查询将在每个索引上运行,并将数据转储到Sphinx索引文件。以下是每个字段和源块本身的描述。

  • type:要索引的数据源类型。在我们的例子中,这是mysql。其他支持的类型包括pgsql,mssql,xmlpipe2,odbc等。
  • sql_host:MySQL主机的主机名。在我们的例子中,这是localhost。这可以是域或IP地址。
  • sql_user:MySQL登录的用户名。在我们的示例中,这是root
  • sql_pass:MySQL用户的密码。在我们的示例中,这是根MySQL用户的密码。
  • sql_db:存储数据的数据库的名称。在我们的例子中,这是测试
  • sql_query:将数据从数据库转储到索引的查询。

这是源块:

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
}

所述指数部件包含源和存储数据的路径。 在

  • source:源块的名称。在我们的示例中,这是src1
  • path:保存索引的路径。
index test1
{
  source        = src1
  path          = /var/lib/sphinx/test1
  docinfo       = extern
}

searchd的组件包含端口和其他变量来运行Sphinx守护进程。

  • listen:Sphinx守护程序将运行的端口,后跟协议。在我们的示例中,这是9306:mysql41。已知的协议是:sphinx(SphinxAPI)和:mysql41(SphinxQL)
  • query_log:保存查询日志的路径。
  • pid_file:Sphinx守护程序的PID文件的路径。
  • seamless_rotate:在将具有大量数据的索引旋转到预缓存时防止搜索停顿。
  • preopen_indexes:是否在启动时强制预先打开所有索引。
  • unlink_old:是否在成功轮换时删除旧索引副本。
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/
}

要复制和粘贴的完整配置如下。您需要在下面更改的唯一变量是源块中的变量sql_pass,该变量如下所示:

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/
}

要探索更多配置,您可以查看/usr/share/doc/sphinx-2.2.11/sphinx.conf.dist文件,其中详细说明了所有变量。

第4步 - 管理索引

在此步骤中,我们将向Sphinx索引添加数据,并通过cron确保索引保持最新数据。

首先,使用我们之前创建的配置将数据添加到索引。

sudo indexer --all

你应该得到类似下面的东西。

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

在生产环境中,必须使索引保持最新。为此,让我们创建一个Cron作业。首先,打开crontab

crontab -e

以下Cron作业将每小时运行一次,并使用我们之前创建的配置文件将新数据添加到索引中。将其复制并粘贴到文件末尾,然后保存并关闭该文件。

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

现在Sphinx已完全设置和配置,我们可以启动该服务并进行试用。

第5步 - 启动Sphinx

使用systemctl启动Sphinx守护进程。

sudo systemctl start searchd

要检查Sphinx守护程序是否正确运行,请运行:

sudo systemctl status searchd

你应该得到类似下面的东西。

●  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是完全自定义和运行的,因此我们将检查它是否正常工作。

第6步 - 测试搜索功能

现在一切都已设置好,让我们测试一下搜索功能。使用MySQL界面连接到SphinxQL。您的提示将更改为MySQL>

mysql -h0 -P9306

我们来搜索一个句子。

SELECT * FROM test1 WHERE MATCH('test document'); SHOW META;

你应该得到类似下面的东西。

+------+----------+------------+
| 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)

在上面的结果中,您可以看到Sphinx在我们的测试句子的索引test1中找到了2个匹配项。SHOW META;命令还显示句子中每个关键字的命中数。

我们来搜索一些关键词。

CALL KEYWORDS ('test one three', 'test1', 1);

你应该得到类似下面的东西。

+------+-----------+------------+------+------+
| 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)

在上面的结果中,您可以看到在test1索引中,Sphinx发现:

  • 关键字“test”的3个文档中的5个匹配项
  • 1个文档中的2个匹配关键字“one”
  • 0个文档中的0个匹配项是关键字“three”

现在您已经测试了Sphinx,您可以根据需要删除测试数据库DROP DATABASE test;

完成后,退出MySQL shell。

quit

结论

在本教程中,我们向您展示了如何安装Sphinx并使用SphinxQL和MySQL进行简单搜索。

通过使用Sphinx,您可以轻松地向您的网站添加自定义搜索。

想要了解更多关于安装和配置Sphinx的相关教程,请前往腾讯云+社区学习更多知识。


参考文献:《How To Install and Configure Sphinx on CentOS 7》

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 如何在Ubuntu 14.04上使用Bower管理前端JavaScript和CSS依赖项

    Bower是前端模块的包管理器,通常由JavaScript和/或CSS组成。它使我们可以轻松搜索,安装,更新或删除这些前端依赖项。

    SQL GM
  • Python3 如何使用NLTK处理语言数据

    文本已成为最常见的表达形式之一。我们每天都要发送电子邮件、短信、推文、更新状态。因此,非结构化文本数据变得非常普遍,分析大量文本数据现在是了解人们的想法的关键方...

    SQL GM
  • 如何在Ubuntu 14.04上设置R.

    R是一种流行的开源编程语言,专门用于统计计算和图形。它被统计学家广泛用于开发统计软件和执行数据分析。R的优势之一是允许用户创作和提交自己的包,因此它具有高度且易...

    SQL GM
  • Vim技巧-光标定位

    Qt君
  • 每天220亿人使用的一个小功能,Facebook点赞按钮的设计门道

    一年前,Facebook点赞按钮发布更新。一年后的今天,Facebook小小的点赞按钮因为Ted刚发布的一段演讲掀起波澜。设计一个像FB点赞按钮那么小的东西很难...

    BestSDK
  • 慢工出细活,Facebook点赞按钮设计中的门道

    一年前,Facebook点赞按钮发布更新。一年后的今天,Facebook小小的点赞按钮因为Ted刚发布的一段演讲掀起波澜。设计一个像FB点赞按钮那么小的东西很...

    奔跑的小鹿
  • 人脸检测-- Face R-FCN + Face R-CNN

    Detecting Faces Using Region-based Fully Convolutional Networks 本文使用 R-FCN 来进行人脸...

    用户1148525
  • 市场巨大的农业领域,该如何玩转无人驾驶?

    博创联动是一家为农业机械和新能源汽车提供解决方案的技术公司。在 2014 年正式进入农业机械领域以前,这家公司在车辆工程和大型装备行业深耕数十年,为工程车、机械...

    BestSDK
  • 双剑合璧-Linux下密码抓取神器

    双剑合璧-Linux下密码抓取神器mimipenguin发布 From ChaMd5安全团队核心成员 zusheng 只要借用一下电脑,便可轻松拿到密码…...

    ChaMd5安全团队
  • 在 Ubuntu 上如何添加 Apt 软件源

    当使用 Ubuntu 软件中心或者从终端命令行输入apt或者apt-get安装软件包时,软件包被从一个或者多个软件源下载下来。一个 APT 软件源是一个网络服务...

    雪梦科技

扫码关注云+社区

领取腾讯云代金券