在Ubuntu安装和配置Sphinx

文件目录  /etc/sphinxsearchphp

 

Ubuntu系统默认是配置有sphinx的,先检查一下,别画蛇添足。。。。。mysql

在开始本指南以前,您须要:linux

  • 一个Ubuntu 16.04服务器。git

  • sudo的一个非root用户,您能够经过如下设置本教程 。github

  • 安装在服务器上,你能够经过下面的第2步设置在MySQL 本教程 。sql

第1步 - 安装Sphinx

在Ubuntu上安装Sphinx很容易,由于它在本地软件包存储库中。 使用安装它apt-get 。不行能够运行apt-get updateshell

sudo apt-get install sphinxsearch

如今您已经在服务器上成功安装了Sphinx。 在启动Sphinx守护进程以前,让咱们进行配置。数据库

第2步 - 建立测试数据库

接下来,咱们将使用随包提供的SQL文件中的示例数据设置数据库。 这将容许咱们测试Sphinx搜索之后工做。apache

让咱们将示例SQL文件导入数据库。 首先,登陆到MySQL服务器shell。npm

mysql -u root -p

提示时输入MySQL root用户的密码。 您提示将改变为mysql> 。

建立虚拟数据库。 在这里,咱们称它为测试 ,但你能够将其命名为任何你想要的。

CREATE DATABASE test;

导入示例SQL文件。

SOURCE /etc/sphinxsearch/example.sql;

而后离开MySQL shell。

quit

如今你有一个数据库填充样本数据。 接下来,咱们将定制Sphinx的配置。

第3步 - 配置Sphinx

Sphinx的配置应该是在一个名为sphinx.conf/etc/sphinxsearch 。 配置包括那些运行必不可少的3个主要模块: 索引 ,searchd的 ,和来源 。 咱们将提供一个示例配置文件供您使用,并解释每一个部分,以便之后进行自定义。

首先,建立sphinx.conf文件。

sudo nano /etc/sphinxsearch/sphinx.conf

这些指数 ,searchd的 ,和块的描述以下。 而后,在这个步骤结束时,对所有sphinx.conf被包括为你复制并粘贴到文件中。

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

  • type :数据源索引的类型。 在咱们的例子,这是MySQL。 其余支持的类型包括pgsql,mssql,xmlpipe2,odbc等。
  • sql_host :主机名MySQL的主机。 在咱们的例子,这是localhost 。 这能够是域或IP地址。
  • sql_user :用户名MySQL的登陆。 在咱们的例子,这是根源 。
  • sql_pass :密码为MySQL用户。 在咱们的示例中,这是根MySQL用户的密码。
  • sql_db :存储数据的数据库的名称。 在咱们的例子,这是考验 。
  • sql_query :查询从数据库到索引那转储数据。

这是源块:

sphinx.conf的源代码块

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 :路径保存索引。

sphinx.conf的索引块

index test1
{
  source        = src1
  path          = /var/lib/sphinxsearch/data/test1
  docinfo       = extern
}

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

  • listen :这Sphinx守护进程运行的端口,后面的协议。 在咱们的例子,这是9306:mysql41。 已知的协议是:Sphinx (SphinxAPI)和:mysql41(SphinxQL)
  • query_log :路径保存查询日志。
  • pid_file :到Sphinx守护进程的PID文件的路径。
  • seamless_rotate :同时旋转海量数据预缓存的指标,防止searchd的摊位。
  • preopen_indexes :是否强行盘前在启动时的全部索引。
  • unlink_old :是否删除成功旋转旧的索引拷贝。

searchd块的sphinx.conf

searchd
{
  listen            = 9312:sphinx       #SphinxAPI port
  listen            = 9306:mysql41      #SphinxQL port
  log               = /var/log/sphinxsearch/searchd.log
  query_log         = /var/log/sphinxsearch/query.log
  read_timeout      = 5
  max_children      = 30
  pid_file          = /var/run/sphinxsearch/searchd.pid
  seamless_rotate   = 1
  preopen_indexes   = 1
  unlink_old        = 1
  binlog_path       = /var/lib/sphinxsearch/data
}

复制和粘贴的完整配置以下。 你须要下面来改变它惟一的变量是sql_pass源块,这是高亮显示的变量。

完整的sphinx.conf文件

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/sphinxsearch/data/test1
  docinfo           = extern
}
searchd
{
  listen            = 9306:mysql41
  log               = /var/log/sphinxsearch/searchd.log
  query_log         = /var/log/sphinxsearch/query.log
  read_timeout      = 5
  max_children      = 30
  pid_file          = /var/run/sphinxsearch/searchd.pid
  seamless_rotate   = 1
  preopen_indexes   = 1
  unlink_old        = 1
  binlog_path       = /var/lib/sphinxsearch/data
}

探索更多的配置,你能够看看在/etc/sphinxsearch/sphinx.conf.sample文件,里面有全部的变量在更详细的解释。

第4步 - 管理索引

在这一步中,咱们将数据添加到Sphinx索引,并确保利用指数保持最新cron 。

首先,使用咱们以前建立的配置将数据添加到索引。

sudo indexer --all

你应该获得相似下面的东西。

OutputSphinx 2.2.9-id64-release (rel22-r5006)
Copyright (c) 2001-2015, Andrew Aksyonoff
Copyright (c) 2008-2015, Sphinx Technologies Inc (http://sphinxsearch.com)

using config file '/etc/sphinxsearch/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.010 sec, 18552 bytes/sec, 384.50 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

在生产环境中,有必要保持索引为最新。 为了作到这一点,让咱们建立一个cronjob。 首先,打开crontab。

crontab -e

可能会询问您要使用哪一个文本编辑器。 选择你喜欢的; 在本教程中,咱们使用nano 。

随后的cronjob将每小时运行一次,并使用咱们以前建立的配置文件向索引添加新数据。 将其复制并粘贴到文件末尾,而后保存并关闭文件。

crontab

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

如今Sphinx已经彻底设置和配置,咱们能够启动服务并尝试。

第5步 - 启动Sphinx

默认状况下,Sphinx守护程序关闭。 首先,咱们将改变这一行启用START=noSTART=yes/etc/default/sphinxsearch 。

sudo sed -i 's/START=no/START=yes/g' /etc/default/sphinxsearch

而后,使用systemctl重启Sphinx守护进程。

sudo systemctl restart sphinxsearch.service

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

sudo systemctl status sphinxsearch.service

你应该获得相似下面的东西。

Output● sphinxsearch.service - LSB: Fast standalone full-text SQL search engine
   Loaded: loaded (/etc/init.d/sphinxsearch; bad; vendor preset: enabled)
   Active: active (running) since Tue 2016-07-26 01:50:00 EDT; 15s ago
   . . .

这也将确保Sphinx守护程序即便在服务器从新启动时也启动。

第6步 - 测试

如今,一切都设置好了,让咱们测试搜索功能。 使用MySQL接口链接到SphinxQL(在端口9306上)。 您提示将改变为mysql> 。

mysql -h0 -P9306

让咱们搜索一个句子。

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

你应该获得相似下面的东西。

Output+------+----------+------------+
| 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发现从咱们的2场比赛test1索引咱们的测试句子。 该SHOW META;命令显示以及在句子中每一个关键字的点击。

让咱们搜索一些关键字。

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

你应该获得相似下面的东西。

Output+------+-----------+------------+------+------+
| 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发现:

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

如今你能够离开MySQL shell了。

quit

结论

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

您还能够找到官方对于PHP,Perl,Python和Ruby和Java本地SphinxAPI实现 。 若是你正在使用的NodeJS,你也能够使用该SphinxAPI包 。

经过使用Sphinx,您能够轻松地添加自定义搜索到您的网站。 有关使用Sphinx的更多信息,请访问该项目的网站 。

相关文章
相关标签/搜索