Sphinx之配置篇

2010-01-7  |  20:33分类:技术细节  |  标签:  |  

作者:周振兴 mail
摘要:MySQL提供了LIKE子句可以很好的实现对数据库中数据的模糊搜索,使用LIKE很多时候可以帮助我们解决一些站内搜索的问题。但是随着MySQL中数据量逐渐增加,LIKE模糊查询的效率将成为MySQL数据库的主要压力。这时候尝试使用sphinx,可以很好的帮你解决这个问题。本文将继续介绍具体如何部署sphinx。在阅读本文前,建议先浏览sphinx使用介绍(前篇),或者跳过本文直接RTFM

+++++++++++++++++++++++++++++++++
正文:
+++++++++++++++++++++++++++++++++

一、下载,安装

下载sphinx-0.9.8.1.tar.gz(在撰写本文时,0.9.8.1是最新版)

安装过程够简洁,在GNU/Linux 2.6.24 Ubuntu 8.04.3 LTS:

tar zxvf sphinx-0.9.8.1.tar.gz
cd sphinx-0.9.8.1
./configure    #这里你可以加上你的安装路径如:./configure --prefix=/usr/local/sphinx
make
sudo make install

二、配置sphinx的数据源

sphinx主要有两个进程indexer和searchd,在他们运行前,我们需要配置好sphinx.conf文件,告诉他们如何工作。(默认配置文件的路径/usr/local/etc/)

首先,我需要配置一个数据源(source),告诉indexer到哪儿去获取原始数据。例如,我们将配置一个名为mars的数据源:

cd /usr/local/etc/
cp sphinx.conf.dist sphinx.conf
vi sphinx.conf
source mars
{
	type = mysql
	sql_host = localhost
	sql_user = sphinxuser
	sql_pass = sI9sWb2uFYxz
	sql_db = discuzdb
	sql_sock = /var/run/mysqld/mysqld.sock
	sql_port = 3306
	……

这里我配置了一个名为mars的数据源。数据类型是mysql,表示indexer将从mysql中获取我要的数据(除了mysql,sphinx还支持很多种类的数据源,如文本,xml文档等)。这里还配置了访问该数据库的主机名、用户、密码、数据库名、数据库端口、以及连接该数据库的socket文件。(注意:配置文件中有一些多余的source需要删除,如source src1throttled : src1)

现在indexer知道去那个数据库取数据了,但是具体取哪个数据表中的哪些列的数据呢?好,我们继续。编写需要索引的数据列的SQL,例如我需要索引字段为cdb_thread.threadtitle,那么sphinx需要用到的SQL是:

	sql_query = SELECT tid AS id, threadtitle FROM cdb_threads;
}

我们注意到,我们的query中一个时id字段,第二个才是我们需要索引的内容。sphinx有这样的规则,你的Query中获取的第一个字段必须是一个唯一的数字(使用自增的字段是很方便的),后面才是你需要索引的内容(另外,也可以你想排序的字段,这里暂不介绍)。

到这,我们就完成了一个数据源的配置,这里的我们的数据源名字是mars(如果需要,我们还可以配置更多数据源,例如Juliet等)。

三、配置sphinx的索引任务

现在有了:数据源以及需要索引的内容。接下来,我们需要在配置文件中,指定一个某个索引任务去索引前面的内容。这个索引任务应该包含:数据源用哪一个、数据数据放在什么目录下、以及其他的一些索引算法的细节参数。

index explorer{
	source = mars              #还记得前面建立的source吧?
	path    = /var/data/sphinx/catalog    #任务的工作空间在哪,sphinx需要一些空间建立索引
	morphology              = stem_en      #搜索的一些“词法”  我也不知道这是什么!:-(

	min_word_len            = 3    
	min_prefix_len          = 0    
	min_infix_len           = 3    
}

四、sphinx搜索配置

最后,还剩一点点工作。那就是配置searchd,你甚至保持默认就可以了。searchd中定义了一些搜索行为,例如当搜索结果集太大的时候,最多返回多少个(默认1000),等等。

搞定配置文件,98%的事情就算完成了。

五、启动、使用Sphinx

所有工作都已经就绪了,现在是倒计时启动的时间了。

执行indexer,对数据进行一次索引。

sudo /usr/local/bin/indexer [--rotate] --config /usr/local/etc/sphinx.conf explorer
//这里的explorer就是前面配置文件中一个索引任务

启动搜索相应进程(searchd):

sudo mkdir -p /var/data/sphinx
sudo /usr/local/bin/searchd --config /usr/local/etc/sphinx.conf &

好了,搞定。我们来测试一下吧:(早就迫不及待了吧)

例如查找字符串 “ENG”
sudo usr/local/bin/search --config /usr/local/etc/sphinx.conf ENG
看看你的搜索结果

如果搜索结果正常,到这,我们就完成全部的sphinx配置和启动工作。在接下来的一篇文章中我将介绍如果使用php向sphinx发送搜索请求,并处理返回结果。

喜欢本文,那就收藏到:

发表您的评论