Bootstrap

对mysql数据库中全文搜索引擎--sphinx的初步研究--by森爷

正如冰与火之歌中兰尼斯特家族的誓言:A Lannister always pay his debts.森爷也绝不食言前面的博文中所说过的话。虽然还没有一个人(哪怕一个也好)在我的博客里留过言或者发过评论,但是,我还是对发博文保持了比较良好的自娱自乐精神,笔耕不辍。

sphinx是一个全文搜索引擎,当然其本身并不直接支持中文的检索。因此,这里,我使用了中文改良版coreseek.

1.安装coreseek。

请百度之。

2.安装过后,我们就要对想要建立索引的表的字段建立索引了。sphinx将会进行类似于lucence的分词和建立索引的过程,最终根据用户写的配置文件来实现建立索引的过程。我们需要做的,就是写一个后缀名为conf的配置文件,放在etc目录下。这个文件的简单格式如下:

source testindexsource
{
type = mysql
sql_host = localhost
sql_user = root
sql_pass =
sql_db = test
sql_port = 3306
sql_query_pre = SET NAMES utf8
sql_query = SELECT id, group_id, UNIX_TIMESTAMP(date_added) AS date_added, title, content FROM documents
sql_attr_timestamp = addtime
}

index testindex
{
source = testindexsource
path = c:/usr/local/coreseek-4.1-win32/var/data/testindex
charset_dictpath = c:/usr/local/coreseek-4.1-win32/etc/
charset_type = zh_cn.utf-8
}

searchd
{
listen = 9312
max_matches = 1000
pid_file = c:/usr/local/coreseek-4.1-win32/var/log/searchd_mysql.pid
log = c:/usr/local/coreseek-4.1-win32/var/log/searchd_mysql.log
query_log = c:/usr/local/coreseek-4.1-win32/var/log/query_mysql.log
}
相信大家都能看懂里面的参数的意思,有几个需要说明一下的是:testindex为建立的索引的名称。testindex参数列表中的source应该与上面的source同名。serchd是coreseek提供的一个服务进程。它的服务端口号是9312。

ok。我们写完了这个配置文件,将其放入etc目录下。

然后,我们输入命令 e:\coreseek\bin\indexer --config e:\coreseek\etc\mysql.conf --all,来建立索引。其中,以e盘开头的字符串是coreseek的安装目录。

然后,我们输入命令:e:\coreseek\bin\searchd --config e:\coreseek\etc\mysql.conf启动coreseek服务进程。

最后,我们来使用建好的索引来查找mysql数据库中的关键字。

在 web根目录下建立一个search目录(当然不在根目录也行,同样目录名也可以随取),复制E:\coreseek\api\ sphinxapi.php文件到search目录(sphinxapi.php这个是sphinx官方提供的api),开始php程序的编写。
在search目录建立一个文件,名字叫啥都行,我管它叫index.php,其内容如下

<?php
include 'sphinxapi.php';
$sc=new SphinxClient();
$sc->SetServer("localhost",9312);
$result=$sc->Query('opera','testindex');
var_dump($result);
?>
其中,opera为我要找的关键字,testindex为配置文件中的索引名称。至此,我们就完成了使用coerseek来快速查找mysql数据库中的关键字的过程。



;