如何安装和配置Sphinx在Ubuntu 14.04

介绍

Sphinx是一个开源搜索引擎,允许全文搜索。 最着名的是非常有效地对大数据执行搜索。 要索引的数据通常可以来自非常不同的来源:SQL数据库,纯文本文件,HTML文件,邮箱等。

Sphinx的一些主要功能包括:

  • 高索引和搜索性能
  • 高级索引和查询工具
  • 高级结果集后处理
  • 经验证的可扩展性,高达数十亿个文档,TB级数据和每秒数千个查询
  • 轻松集成SQL和XML数据源,SphinxQL,SphinxAPI或SphinxSE搜索接口
  • 通过分布式搜索轻松扩展

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

先决条件

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

  • 一个Ubuntu 14.04 Droplet。
  • sudo的一个非root用户,您可以通过以下设置本教程

第1步 - 安装MySQL服务器

注意:您只需要完成此部分,如果你不已经安装了MySQL服务器。

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

更新软件包列表。

sudo apt-get update

然后安装MySQL服务器。

sudo apt-get install mysql-server

在提示时输入root用户的密码,然后再次输入相同的密码进行确认。

第2步 - 安装Sphinx

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

要安装Sphinx,请运行:

sudo apt-get install sphinxsearch

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

第3步 - 创建测试数据库

在本节中,我们将使用随包提供的示例SQL文件设置数据库。

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

登录到MySQL服务器shell。

mysql -u root -p

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

创建一个数据库名为test

CREATE DATABASE test;

导入SQL文件。

SOURCE /etc/sphinxsearch/example.sql;

然后退出MySQL shell。

quit

现在你应该用测试数据库填充数据。

第4步 - 配置Sphinx

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

创建sphinx.conf文件。

sudo nano /etc/sphinxsearch/sphinx.conf

Sphinx配置由3个主要块组成,这些块是运行必不可少的。 它们是索引 ,searchd的 ,和 每个这些块的下面描述,并在此步骤结束时,对全部sphinx.conf被包括为你粘贴到该文件。

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

  • sql_host :主机名MySQL的主机。 在我们的例子,这是本地主机 这可以是域或IP地址。
  • sql_user :用户名MySQL的登录。 在我们的例子,这是根源
  • sql_pass :密码为MySQL用户。 在我们的例子,这是MySQL的root用户的密码
  • sql_db :存储数据的数据库的名称。 在我们的例子,这是考验
  • sql_query :这是查询那转储数据索引。
source src1
{
  type          = mysql

  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

  sql_query_info        = SELECT * FROM documents WHERE id=$id
}

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

  • source :源块的名称。 在我们的例子,这是src1的
  • path :此路径保存索引。
  • charset_type :这是指数的字符集。 您还可以设置此为UTF-8。
index test1
{
  source            = src1
  path          = /var/lib/sphinxsearch/data/test1
  docinfo           = extern
  charset_type      = sbcs
}

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

  • listen :这是Sphinx守护进程运行的端口。 在我们的示例中,这是9312。
  • query_log :此路径保存查询日志。
  • pid_file :这是路径,Sphinx守护进程的PID文件。
  • max_matches :最大号码与每个搜索字词返回。
  • seamless_rotate :同时旋转海量数据预缓存的指标,防止searchd的摊位。
  • preopen_indexes :是否强行盘前在启动时的所有索引。
  • unlink_old :是否取消链接成功的旋转旧的索引拷贝。
searchd
{
  listen            = 9312   # Port to listen on
  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
  max_matches       = 1000
  seamless_rotate       = 1
  preopen_indexes       = 1
  unlink_old        = 1
  binlog_path       = /var/lib/sphinxsearch/data
}

复制和粘贴的完整配置如下。 你需要下面来改变它唯一的变量是sql_pass源块,这是突出。

source src1
{
  type          = mysql

  sql_host      = localhost
  sql_user      = root
  sql_pass      = password # change this to your root users 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

  sql_query_info        = SELECT * FROM documents WHERE id=$id
}
index test1
{
  source            = src1
  path              = /var/lib/sphinxsearch/data/test1
  docinfo           = extern
  charset_type      = sbcs
}
searchd
{
  listen            = 9312
  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
  max_matches       = 1000
  seamless_rotate   = 1
  preopen_indexes   = 1
  unlink_old        = 1
  binlog_path       = /var/lib/sphinxsearch/data
}

第5步 - 向索引添加数据

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

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

sudo indexer --all

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

Sphinx 2.0.4-id64-release (r3135)
Copyright (c) 2001-2012, Andrew Aksyonoff
Copyright (c) 2008-2012, Sphinx Technologies Inc (http://sphinxsearch.com)

using config file '/etc/sphinxsearch/sphinx.conf'...
indexing index 'test1'...
WARNING: collect_hits: mem_limit=0 kb too low, increasing to 25600 kb
collected 4 docs, 0.0 MB
sorted 0.0 Mhits, 100.0% done
total 4 docs, 193 bytes
total 0.005 sec, 33788 bytes/sec, 700.28 docs/sec
total 3 reads, 0.000 sec, 0.1 kb/call avg, 0.0 msec/call avg
total 9 writes, 0.000 sec, 0.1 kb/call avg, 0.0 msec/call avg

要使索引保持最新,请创建一个cronjob。

打开crontab。

crontab -e

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

将以下内容复制并粘贴到文件末尾,然后保存并关闭。

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

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

第6步 - 启动Sphinx

在本节中,我们将启动Sphinx守护进程。

默认情况下,Sphinx守护程序关闭。 为了使Sphinx,首开/etc/default/sphinxsearch

sudo nano /etc/default/sphinxsearch

查找行START=no并将其设置为yes。

START=yes

然后,保存并关闭文件。

最后,启动Sphinx守护进程。

sudo service sphinxsearch start

第7步 - 测试搜索

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

search this is my test document number

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

Sphinx 2.0.4-id64-release (r3135)
Copyright (c) 2001-2012, Andrew Aksyonoff
Copyright (c) 2008-2012, Sphinx Technologies Inc (http://sphinxsearch.com)

using config file '/etc/sphinxsearch/sphinx.conf'...
index 'test1': query 'this is my test document number ': returned 2 matches of 2 total in 0.002 sec

displaying matches:
1. document=1, weight=7431, group_id=1, date_added=Tue Dec 16 09:49:04 2014
id=1
group_id=1
group_id2=5
date_added=2014-12-16 09:49:04
title=test one
content=this is my test document number one. also checking search within phrases.
2. document=2, weight=7431, group_id=1, date_added=Tue Dec 16 09:49:04 2014
id=2
group_id=1
group_id2=6
date_added=2014-12-16 09:49:04
title=test two
content=this is my test document number two

words:
1. 'this': 4 documents, 4 hits
2. 'is': 4 documents, 4 hits
3. 'my': 2 documents, 2 hits
4. 'test': 3 documents, 5 hits
5. 'document': 2 documents, 2 hits
6. 'number': 3 documents, 3 hits

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

结论

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

如果你正在使用PHP, 这里有一些方便的例子来测试Sphinx。

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

赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏