1、http://sphinxsearch.com/downloads/current/ 官网下载对应系统版本,本地是在windows环境下配置sphinx的
2、解压后目录结构
3、新建data和log目录,用于存放索引及日志 文件。新建sphinx.conf配置文件,内容如下:
source doc
{
type = mysql
sql_host = 127.0.0.1
sql_user = root
sql_pass = root
sql_db = leshu
sql_port = 3306
sql_query_pre = SET NAMES utf8
# 一个数据源中只能有一个主查询,这条语句取出的数据就是sphin将要创建全文索引的语句
# 主查询的要求:第一个字段必须是ID,如果名字不为ID,取个别名叫id(类型必须是非零唯一、不重复的整数)
# sphinx只能对属性字段排序,sphinx要排序的字段必须取出该字段,sphin排序必须将某个字段定义成一个属性
sql_query = SELECT id,uname FROM usertb
sql_query_post = UPDATE maxid set id = (SELECT MAX(id) FROM usertb)
#sql_attr_uint = id
#sql_field_string = id
#sql_field_string = uname
}
#增量索引
source doc_zl
{
type = mysql
sql_host = 127.0.0.1
sql_user = root
sql_pass = root
sql_db = leshu
sql_port = 3306
sql_query_pre = SET NAMES utf8
# 一个数据源中只能有一个主查询,这条语句取出的数据就是sphin将要创建全文索引的语句
# 主查询的要求:第一个字段必须是ID,如果名字不为ID,取个别名叫id(类型必须是非零唯一、不重复的整数)
# sphinx只能对属性字段排序,sphinx要排序的字段必须取出该字段,sphin排序必须将某个字段定义成一个属性
sql_query = SELECT id,uname FROM usertb WHERE id > (SELECT id FROM maxid)
sql_query_post = UPDATE maxid set id = (SELECT MAX(id) FROM usertb)
}
# index定义
# 配置索引--》生成的索引文件
# 说明:一个数据源对应一个索引的配置
index doc
{
source = doc
path =D:/extend/sphinx-3.1.1/data/doc
enable_star = 1 #开启通配符
min_prefix_len = 1 #最小前缀
min_infix_len = 1 #最小中缀
# 简单分词,只支持0和1,如果要搜索中文,请指定为1
ngram_len = 1
# 需要分词的字符,如果要搜索中文,去掉前面的注释
ngram_chars = U+3000..U+2FA1F
}
#配置增量索引
index doc_zl
{
source = doc_zl
path =D:/extend/sphinx-3.1.1/data/doc_zl
enable_star = 1 #开启通配符
min_prefix_len = 1 #最小前缀
min_infix_len = 1 #最小中缀
# 简单分词,只支持0和1,如果要搜索中文,请指定为1
ngram_len = 1
# 需要分词的字符,如果要搜索中文,去掉前面的注释
ngram_chars = U+3000..U+2FA1F
}
indexer
{
mem_limit = 128M
}
searchd
{
listen = 9312
listen = 9306:mysql41
log = D:/extend/sphinx-3.1.1/log/searchd.log
query_log = D:/extend/sphinx-3.1.1/log/query.log
read_timeout = 5
max_children = 30
# 最大返回的记录数
max_matches = 1000
pid_file = D:/extend/sphinx-3.1.1/log/searchd.pid
# windows下启动searchd服务一定要注释掉这个
#seamless_rotate = 1
preopen_indexes = 1
unlink_old = 1
workers = threads # for RT to work
binlog_path = D:/extend/sphinx-3.1.1/data
}
4、准备测试数据,700W条测试数据下载
5、安装服务 及 创建索引文件
D:\extend\sphinx-3.1.1\bin>searchd -c d:/extend/sphinx-3.1.1/sphinx.conf --install
D:\extend\sphinx-3.1.1\bin>indexer -c d:/extend/sphinx-3.1.1/sphinx.conf doc
6、启动服务
7、本地测试。把 api/sphinxapi.php 文件复制到项目目录中,新建一个demo
<?php
include './lib/sphinxapi.php';
$s = new SphinxClient ();
//排序设置
$s->SetSortMode(SPH_SORT_ATTR_DESC,'id');
$s->setServer('localhost', 9312);
$s->SetLimits(10,10);
//模糊匹配
$result = $s->query('*用户9*', 'doc');
echo '<pre>';
print_r($result);die;
8、新增记录后创建增量索引,并把增量索引合并到主索引里面
D:\extend\sphinx-3.1.1\bin>indexer -c d:/extend/sphinx-3.1.1/sphinx.conf doc_zl
D:\extend\sphinx-3.1.1\bin>indexer -c d:/extend/sphinx-3.1.1/sphinx.conf --merge doc doc_zl --rotate
本地700W测试数据,查询结果是0.7s左右^^