sphinx 环境搭建
一。http://www.sphinxsearch.org/archives/80
前提 yum -y install mysql mysql-devel
yum -y install automake autoconf 主要是自动加载其他配置和配置中文分词使用的(自我的理解,其实不太清楚。automake 好像要求2.2以上版本吧)
wgethttp://www.sphinxsearch.com/downloads/sphinx-0.9.9.tar.gz下载sphinx安装包
tar zxvf sphinx-0.9.9.tar.gz
cd sphinx-0.9.9
/configure –prefix=/usr/local/sphinx #注意:这里sphinx已经默认支持了mysql
make && make install # 其中的“警告”可以忽略
安装完毕后查看一下/usr/local/sphinx下是否有 三个目录 bin etc var,如有,则安装无误!
mysql 数据库导入 进入 test 数据库
CREATE TABLE `documents` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`group_id` int(11) NOT NULL,
`group_id2` int(11) NOT NULL,
`date_added` datetime NOT NULL,
`title` varchar(255) NOT NULL,
`content` text NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=latin1;
插入数据:
INSERT INTO `documents` VALUES (1,1,5,'2017-03-13 09:42:40','test one','this is my test document number one. also checking search within phrases.'),(2,1,6,'2017-03-13 09:42:40','test two','this is my test document number two'),(3,2,7,'2017-03-13 09:42:40','another doc','this is another group'),(4,2,8,'2017-03-13 09:42:40','doc number four','this is to test groups');
//进入sphinx 的安装配置目录 /usr/local/sphinx/etc 把example.sql 导入到mysql数据库
sphinx自带的搜索命令:search 后来取消了,所以要使用php来进行测试
cd /usr/local/sphinx/etc #进入sphinx的配置文件目录
cp sphinx.conf.dist sphinx.conf#新建Sphinx配置文件
vim sphinx.conf #编辑sphinx.conf
sphinx 的配置分析:http://blog.csdn.net/gaoxuaiguoyi/article/details/48739263
bin/indexer -c etc/sphinx.conf article ### 建立索引文件的命令
启动sphinx 服务 进入sphinx 安装目录 执行
bin/searchd -c etc/sphinx.conf
测试 安装php-phinx 扩展
#如果没有扩展安装包,先下载
wgethttp://pecl.php.net/get/sphinx-1.3.2.tgz
tar zxvf sphinx-1.3.2.tgz
cd sphinx-1.3.2
/var/lanmps/php/bin/phpize #注意phpize 得编译情况
./configure 或者
./configure --with-php-config=/var/lanmps/php/bin/php-config --with-sphinx=/var/lanmps/sphinx
make
make install
查看extension_dir 目录中是否有sphinx.so文件
通过php -m 查看扩展是否显示 如果sphinx.so 文件存在并且php -m 不显示扩展在php.ini文件中加入
[sphinx]
extension=sphinx.so
重启php-fpm service php-fpm restart
service nginx start
service mysqld start
php 测试sphinx 分析结果
$s = new SphinxClient;
$s->setServer("localhost", 9312);
$s->setMatchMode(SPH_MATCH_ANY);
$s->setMaxQueryTime(3);
$result = $s->query("number is");
echo '';
print_r($result);
yum list installed
yum list php56*
完美配置:http://blog.csdn.net/baidu_34812181/article/details/51263028
rpm -qa nginx
nginx-1.0.15-12.el6.x86_64
rpm -ql nginx-1.0.15-12.el6.x86_64
二。接下来我们需要建立一个Sphinx的配置文件 E:\coreseek\etc\mysql.conf,将其内容改为下面这些:
(参考了:https://www.oschina.net/question/84274_11938)
source mysql
{
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,addtime,title,content FROM post
sql_attr_timestamp = addtime
}
index mysql
{
source = mysql
path = E:/coreseek/var/data/mysql
charset_dictpath = E:/coreseek/etc/
charset_type = zh_cn.utf-8
}
searchd
{
listen = 9312
max_matches = 1000
pid_file = E:/coreseek/var/log/searchd_mysql.pid
log = E:/coreseek/var/log/searchd_mysql.log
query_log = E:/coreseek/var/log/query_mysql.log
}
先讲下这个配置文件中每项的含义。
source mysql{} 定义源名称为mysql,也可以叫其他的,比如:source xxx{}
type 数据源类型
sql_* 数据相关的配置,比如sql_host,sql_pass什么的,这些不解释鸟
sql_query 建立索引时的查询命令,在这里尽可能不使用where或group by,将where与groupby的内容交给sphinx,由sphinx进行条件过滤与groupby效率会更高,注意:select 的字段必须包括一个唯一主键以及要全文检索的字段,where中要用到的字段也要select出来
sql_query_pre 在执行sql_query前执行的sql命令, 可以有多条
sql_attr 以这个开头的配置项,表示属性字段,在where,orderby,groupby中出现的字段要分别定义一个属性,定义不同类型的字段要用不同的属性名,比如上面的sql_attr_timestamp就是时间戳类型。
index mysql{} 定义索引名称为mysql,也可以叫其他的,比如:index xxx{}
source 关联源,就是source xxx定义的。
path 索引文件存放路径,比如:E:/coreseek/var/data/mysql 实际存放在E:/coreseek/var/data/目录,然后创建多个名称为mysql后缀却不同的索引文件
charset_dictpath 指明分词法读取词典文件的位置,当启用分词法时,为必填项。在使用LibMMSeg作为分词 库时,需要确保词典文件uni.lib在指定的目录下
charset_type 字符集,比如charset_type = zh_cn.gbk
searchd{} sphinx守护进程配置
listen 监听端口
max_matches最大匹配数,也就是查找的数据再多也只返回这里设置的1000条
pid_file pid文件路径
log全文检索日志
query_log查询日志
好了,配置文件就这样,配置的参数还有很多,大家可以自己查文档。
三。中文分词 coreseek
http://www.sphinxsearch.org/archives/82
中文分词的 Coreseek 老下载不到资源,好不容易下载到,结果提示我本地autoconf 版本过高,因工作原因暂停试验以后再试