MySQL+Sphinx安装全步骤

来源:互联网 发布:php用来做什么的 编辑:程序博客网 时间:2024/06/05 17:50
原文地址:MySQL+Sphinx安装全步骤作者:邓强
各位首先需要自己去官网下载Linux上的MySQL以及Sphinx压缩包,然后再进行以下步骤。

  通过yum命令更新依赖包(与php环境搭建依赖包一起更新了)
yum -y install gcc g++ gcc-c++ libjpeglibjpeg-devel libpng libpng-devel freetype freetype-devel libxml2libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-develbzip2 bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogse2fsprogs-devel krb5 krb5-devel libidn libidn-devel opensslopenssl-devel openldap openldap-devel nss_ldap openldap-clientsopenldap-servers patch libtool automake imake mysql-develexpat-devel


tar zxvf mysql-5.1.55.tar.gz
tar zxvf sphinx-0.9.9.tar.gz
cp -r sphinx-0.9.9/mysqlse/mysql-5.1.55/storage/sphinx
cd mysql-5.1.55
./BUILD/autorun.sh
./configure--prefix=/usr/local/webserver/mysql/ --enable-assembler--with-extra-charsets=complex --enable-thread-safe-client--with-big-tables --with-readline --with-ssl --with-embedded-server--enable-local-infile--with-plugins=partition,innobase,myisammrg,sphinx
make
make install

。。。省略若干配置步骤,和平时配置MySQL没什么两样。
安装完成启动MySQL后查看sphinx存储引擎是否安装成功
在mysql命令行下执行
show engines;


安装Sphinx全文检索服务器
Sphinx默认不支持中文索引及检索,以前用Coreseek的补丁来解决,目前Coreseek 不单独提供补丁文件,而基于sphinx开发了Coreseek全文检索服务器,Coreseek应该是现在用的最多的sphinx中文全文检索,它提供了为Sphinx设计的中文分词包LibMMSeg包含mmseg中文分词,其实coreseek-3.2.14.tar.gz中已经包含了sphinx,前面安装SphinxSE时也可以使用这个压缩包里的mysqlse。
我们来看一下的安装过程:

安装autoconf
tar zxvfautoconf-2.64.tar.gz
cd autoconf-2.64
./configure --prefix=/usr
make
make install
cd ..

tar zxvfcoreseek-3.2.14.tar.gz
cd coreseek-3.2.14
cd mmseg-3.2.14/
./bootstrap
./configure--prefix=/usr/local/mmseg3
make
make install
cd ../

cd csft-3.2.14
sh buildconf.sh
./configure --prefix=/usr/local/coreseek--without-python --without-unixodbc --with-mmseg--with-mmseg-includes=/usr/local/mmseg3/include/mmseg/--with-mmseg-libs=/usr/local/mmseg3/lib/ --with-mysql--host=arm
make
make install

cd /usr/local/coreseek/etc



进入配置目录通过命令ls可以看到3个文件
# cd/usr/local/coreseek/etc/
   example.sql  sphinx.conf.dist sphinx-min.conf.dist
其中example.sql是示例sql脚本我们将其导入到数据库中的test数据库中作为测试数据(会创建两张表documents和tags)
vi sphinx.conf
输入以下内容
source src1
{
type = mysql
sql_host = localhost
sql_user = root
sql_pass = 878899
sql_db = test
sql_port = 3306 # optional, default is3306
sql_sock                         = /tmp/mysql.sock
sql_query_pre = SET NAMESutf8
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 documentsWHERE id=$id
}
index test1
{
source = src1
path =/usr/local/coreseek/var/data/test1
docinfo = extern
charset_type = zh_cn.utf-8
mlock = 0
morphology = none
min_word_len = 1
html_strip = 0
charset_dictpath =/usr/local/mmseg3/etc/
ngram_len = 0
}
indexer
{
mem_limit = 32M
}

searchd
{
port = 9312
log =/usr/local/coreseek/var/log/searchd.log
query_log =/usr/local/coreseek/var/log/query.log
read_timeout = 5
max_children = 30
pid_file =/usr/local/coreseek/var/log/searchd.pid
max_matches = 1000
seamless_rotate = 1
preopen_indexes = 0
unlink_old = 1
}


生成索引
/usr/local/coreseek/bin/indexer -c/usr/local/coreseek/etc/sphinx.conf --all

在不启动sphinx的情况下即可测试命令:
/usr/local/coreseek/bin/search -c/usr/local/coreseek/etc/sphinx.conf number

过滤查询
/usr/local/coreseek/bin/search -c/usr/local/coreseek/etc/sphinx.conf number --filter group_id2  限定group_id 为2 返回一条记录

同样也可以测试中文(需将命令行终端编码调整为utf-8)
/usr/local/coreseek/bin/search -c/usr/local/coreseek/etc/sphinx.conf 研究生创业

可以看到我们输入的查询文字已经被拆分成了两个词,只是因为我们的测试数据中没有中文数据查询结果为空。我们插入几条新数据。
INSERT INTOdocuments('id','group_id','group_id2','date_added','title','content')VALUES(NULL,'2','3','2011-02-0100:37:12','研究生的故事','研究生自主创业'),(NULL,'1','1','2011-01-2800:38:22','研究','为了创业而研究生命科学');


INSERT INTO `test`.`documents`(
`id` ,
`group_id` ,
`group_id2` ,
`date_added` ,
`title` ,
`content` 
)
VALUES (
NULL , '2', '3', '2011-02-01 00:37:12','研究生的故事', '研究生自主创业'
), (
NULL , '1', '1', '2011-01-28 00:38:22','研究', '为了创业而研究生命科学'
);

插入新数据后需要重新生成索引
/usr/local/coreseek/bin/indexer -c/usr/local/coreseek/etc/sphinx.conf test1
然后执行查询测试 
/usr/local/coreseek/bin/search -c/usr/local/coreseek/etc/sphinx.conf 研究生创业

我们搜索的词语是“研究生创业”,可以看到词语被拆分成了研究生和创业两个词,虽然有两条记录都包含“创业和”研究生”这几个字但是“研究生命科学”中的“研究生”三个字虽然是紧挨着的但是不是一个词语,结果是只匹配一条“研究生自主创业”,我们在搜索“研究”这个词语
/usr/local/coreseek/bin/search -c/usr/local/coreseek/etc/sphinx.conf 研究

  同样匹配一条记录,而“研究生的故事”和“研究生自主创业”的词语却没有被查询出来,可以看出sphinx与分词技术结合可以匹配出相关度更高的结果。
  当然我们的目的不仅限与命令行下的测试,我们可以通过搜索API调用来执行搜索,搜索API支持PHP、Python、Perl、Rudy和Java。如果从PHP脚本检索需要先启动守护进程searchd,PHP脚本需要连接到searchd上进行检索:
  /usr/local/coreseek/bin/searchd -c/usr/local/coreseek/etc/sphinx.conf
在解压后的sphinx-0.9.9/api目录下的sphinxapi.php就是sphinx官方为我们提供的API文件(其实也可以使用PHP的sphinx扩展),只需将其包含进自己的PHP脚本文件就可以了。

0 0
原创粉丝点击