如何在 Ubuntu 14.04 上安装和配置 Sphinx

介绍

Sphinx是一个开源搜索引擎,允许全文本搜索,它以非常高效地对大数据进行搜索而闻名。要索引的数据通常可以来自非常不同的来源:SQL数据库,简单文本文件,HTML文件,邮箱等。

Sphinx的一些关键特征是:

  • 高索引和搜索性能
  • 先进的索引和查询工具
  • 先进的结果设置 post-processing
  • 已证明可扩展到数十亿的文档,万兆数据和每秒数千个查询
  • 易于与SQL和XML数据源集成,以及SphinxQL、SphinxAPI或SphinxSE搜索接口
  • 易于扩展与分布式搜索

在本教程中,我们将使用分布包中包含的示例 SQL 文件来设置 Sphinx 与 MySQL 服务器,它将为您提供如何为您的项目使用 Sphinx 的基本想法。

前提条件

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

  • 一个 Ubuntu 14.04 Droplet
  • 一个 sudo 非根用户,您可以通过遵循 本教程来设置。

步骤1:安装MySQL服务器

** 注意:** 如果您尚未安装 MySQL 服务器,您只需要完成此部分。

在本节中,我们将安装MySQL服务器,MySQL将允许我们存储样本数据的数据库,我们可以使用它来测试Sphinx的搜索能力。

更新包列表。

1sudo apt-get update

然后安装MySQL服务器。

1sudo apt-get install mysql-server

当被要求时,输入根用户的密码,然后再次输入相同的密码以确认。

第2步:安装Sphinx

在本节中,我们将安装Sphinx。

要安装Sphinx,运行:

1sudo apt-get install sphinxsearch

现在你已经成功地安装了Sphinx在你的服务器上. 在启动Sphinx戴蒙之前,让我们配置它。

步骤三:创建测试数据库

在本节中,我们将使用附带包的示例 SQL 文件来设置数据库。

让我们将一个示例的 SQL 文件导入数据库。

登录到 MySQL 服务器壳。

1mysql -u root -p

当被问及时,请输入MyQL root用户的密码,您的提示将更改为mysql>

创建一个名为测试的数据库。

1CREATE DATABASE test;

导入 SQL 文件。

1SOURCE /etc/sphinxsearch/example.sql;

然后输出MySQL shell。

1quit

现在你应该有测试数据库填满数据。

步骤 4 – 配置 Sphinx

在本节中,我们将配置Sphinx配置文件。

创建sphinx.conf文件。

1sudo nano /etc/sphinxsearch/sphinx.conf

Sphinx配置由3个主要的区块组成,它们是 index, searchd,和 source. 这些区块中每一个都描述在下面,在这个步骤的结束时,包含了整个sphinx.conf,以便您将其粘贴到文件中。

源块包含 MySQL 服务器的源类型、用户名和密码。 SQL 查询的第一列应该是唯一的 ID. SQL 查询将在每个索引上运行,并将数据投放到 Sphinx 索引文件中。

  • sql_host: MySQL 主机的主机名. 在我们的示例中,这是 localhost. 这可能是域名或 IP 地址
  • sql_user:MySQL 登录的用户名. 在我们的示例中,这是 root.
  • sql_pass:MySQL 用户的密码. 在我们的示例中,这是 root MySQL 用户的密码
  • sql_db:存储数据库的名称.在我们的示例中,这是 test. sql_query:这是索引将数据放到索引
 1source src1
 2{
 3  type			= mysql
 4
 5  sql_host		= localhost
 6  sql_user		= root
 7  sql_pass		= password
 8  sql_db	    = test
 9  sql_port		= 3306 # optional, default is 3306
10
11  sql_query		= \
12  SELECT id, group_id, UNIX_TIMESTAMP(date_added) AS date_added, title, content \
13  FROM documents
14
15  sql_attr_uint		= group_id
16  sql_attr_timestamp	= date_added
17
18  sql_query_info		= SELECT * FROM documents WHERE id=$id
19}

索引组件包含数据存储的来源和路径。

  • source: 源块的名称 在我们的例子中,这是 src1.
  • path: 这个保存索引的路径.
  • charset_type: 这是索引的序列。 您还将此设置为 utf-8
1index test1
2{
3  source			= src1
4  path			= /var/lib/sphinxsearch/data/test1
5  docinfo			= extern
6  charset_type		= sbcs
7}

**searchd 组件包含端口和其他变量来运行 Sphinx Daemon。

在我们的例子中,这是9312.

  • query_log: 保存查询日志的此路径
  • pid_file: 这是 Sphinx daemon 的 PID 文件的路径
  • max_matches: 每个搜索术语返回的最大数目匹配
  • seamless_rotate: 防止搜索站点在旋转具有大量数据的索引时进行预存
  • preopen_indexes: 是否要在启动时强制开启所有索引 `unlink_old: 是否要在成功旋转时卸载旧索引副本( _
 1searchd
 2{
 3  listen			= 9312   # Port to listen on
 4  log			= /var/log/sphinxsearch/searchd.log
 5  query_log		= /var/log/sphinxsearch/query.log
 6  read_timeout		= 5
 7  max_children		= 30
 8  pid_file		= /var/run/sphinxsearch/searchd.pid
 9  max_matches		= 1000
10  seamless_rotate		= 1
11  preopen_indexes		= 1
12  unlink_old		= 1
13  binlog_path		= /var/lib/sphinxsearch/data
14}

下面是复制和粘贴的完整配置,您需要更改的唯一变量是源块中的sql_pass,该变量被突出。

 1source src1
 2{
 3  type			= mysql
 4
 5  sql_host		= localhost
 6  sql_user		= root
 7  sql_pass		= password # change this to your root users MySQL password
 8  sql_db		= test
 9  sql_port		= 3306
10
11  sql_query		= \
12  SELECT id, group_id, UNIX_TIMESTAMP(date_added) AS date_added, title, content \
13  FROM documents
14
15  sql_attr_uint			= group_id
16  sql_attr_timestamp	= date_added
17
18  sql_query_info		= SELECT * FROM documents WHERE id=$id
19}
20index test1
21{
22  source			= src1
23  path				= /var/lib/sphinxsearch/data/test1
24  docinfo			= extern
25  charset_type		= sbcs
26}
27searchd
28{
29  listen			= 9312
30  log				= /var/log/sphinxsearch/searchd.log
31  query_log			= /var/log/sphinxsearch/query.log
32  read_timeout		= 5
33  max_children		= 30
34  pid_file			= /var/run/sphinxsearch/searchd.pid
35  max_matches		= 1000
36  seamless_rotate	= 1
37  preopen_indexes	= 1
38  unlink_old		= 1
39  binlog_path		= /var/lib/sphinxsearch/data
40}

步骤 5 - 将数据添加到索引中

在本节中,我们将将数据添加到Sphinx索引中。

使用我们之前创建的 config 添加数据进行索引。

1sudo indexer --all

你应该得到一个看起来如下的东西。

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

要更新索引,允许创建 cronjob。

开启Crontab。

1crontab -e

您可能会被问及您想要使用的文本编辑器。选择您喜欢的编辑器;在本教程中,我们使用了nano

在文件末尾复制并粘贴下列内容,然后保存并关闭它。

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

上面的 cronjob 将每小时运行,并使用默认 config 文件将新数据添加到索引中。

步骤6 - 开始Sphinx

在本节中,我们将开始Sphinx Daemon。

要启用 Sphinx,首先打开 /etc/default/sphinxsearch

1sudo nano /etc/default/sphinxsearch

查找开始=不,然后将其设置为

1START=yes

然后保存并关闭文件。

最后,开始Sphinx大象。

1sudo service sphinxsearch start

步骤7 - 测试搜索

在本节中,我们将测试我们的搜索. 输入以下命令。

1search this is my test document number

你应该得到一个看起来如下的东西。

 1Sphinx 2.0.4-id64-release (r3135)
 2Copyright (c) 2001-2012, Andrew Aksyonoff
 3Copyright (c) 2008-2012, Sphinx Technologies Inc (http://sphinxsearch.com)
 4
 5using config file '/etc/sphinxsearch/sphinx.conf'...
 6index 'test1': query 'this is my test document number ': returned 2 matches of 2 total in 0.002 sec
 7
 8displaying matches:
 91. document=1, weight=7431, group_id=1, date_added=Tue Dec 16 09:49:04 2014
10id=1
11group_id=1
12group_id2=5
13date_added=2014-12-16 09:49:04
14title=test one
15content=this is my test document number one. also checking search within phrases.
162. document=2, weight=7431, group_id=1, date_added=Tue Dec 16 09:49:04 2014
17id=2
18group_id=1
19group_id2=6
20date_added=2014-12-16 09:49:04
21title=test two
22content=this is my test document number two
23
24words:
251. 'this': 4 documents, 4 hits
262. 'is': 4 documents, 4 hits
273. 'my': 2 documents, 2 hits
284. 'test': 3 documents, 5 hits
295. 'document': 2 documents, 2 hits
306. 'number': 3 documents, 3 hits

上面你可以找到2匹配从我们的测试索引我们的搜索术语. 你也可以找到匹配每个单词。

结论

在本教程中,我们向您展示了使用命令行进行非常简单的搜索,您还可以找到PHP,Perl,Python,Ruby和Java的官方原生SphinxAPI实现方案。

如果你正在使用PHP, 这里是测试Sphinx的一些实用例子。

通过使用Sphinx,您可以轻松地添加自定义搜索到您的网站. 有关使用Sphinx的更多信息,请访问 项目网站

Published At
Categories with 技术
comments powered by Disqus