1.下载安装sphinx
下载地址:http://sphinxsearch.com/downloads/current/
注意:3.3.1版本3.2.1版本没有提供libeay32.dll和ssleay32.dll两个动态链接库而这两个动态链接库是配合使用的单独下载一般无法使用
如果提示缺少这两个动态链接库可以下载3.1.1版本
下载的时候注意系统版本和sphinx版本要一致32位还是64位
3.3.1使用的vc++2013编译去微软官网下载:https://www.microsoft.com/zh-CN/download/details.aspx?id=40784
下载解压后得到如下文件夹(data(存放数据索引)和log(存放日志文件)是自己手动建的文件夹)
2.设置配置文件
打开etc目录,里面有三个文件,example.sql是创建测试表的脚本数据,稍后会用到,sphinx.conf.dist是完整版默认配置sphinx-min.conf.dist是简化版,
把sphinx.conf.dist复制一份到bin目录下,并且重命名为sphinx.conf.(也可以使用sphinx-min.conf.dist简化版)
配置文件的几个组成部分:
- source 数据源,这里配置你要进行全文检索的数据的来源
- index 索引,从上面的数据源处构建索引,相当于字典检索,要有整本字典内容后才会有索引
- indexer 构建索引,需要重新构建索引时,其实就是调用indexer这个命令
- searchd 提供搜索查询的服务,后台运行
主要配置文件如下:
source test ## test为数据源命名的名称,可以根据数据源的属性更改
{
type = mysql ## 数据源,本项目使用mysql
sql_host = localhost ## 数据库服务器,这里因为是测试,使用的是本地数据库
sql_user = root # 数据库用户名
sql_pass = root # 数据库密码
sql_db = test ## 数据库名称,替换成你自己的数据库名称
sql_port = 3306 ## 数据库端口,默认3306
sql_query_pre = SET NAMES utf8 ## 如果你的数据库不是uft8编码的,注释掉本行
sql_query = \ ## 主查询,查询出所有在检索范围的数据替换成自己要执行的sql语句
SELECT id, group_id, UNIX_TIMESTAMP(date_added) AS date_added, title, content \
FROM documents
sql_attr_uint = group_id ## 属性
sql_attr_uint = date_added ## 属性,可用来排序
}
index test1 ## 索引名称,自行命名
{
source = test ## 基于这个数据源构建索引
path = D:/sphinx/data/ ## 存放索引的目录,自己创建
charset_table = 0..9, A..Z->a..z, _, a..z, U+410..U+42F->U+430..U+44F, U+430..U+44F ## 指定utf-8的编码表
mlock = 0
morphology = none ## 词形处理器,如果检索中文用不到,dogs<==>dog
min_word_len = 1 ## 最小索引词长度,小于这个长度的词不会被索引
ngram_len = 1 ## 简单分词,只支持0和1,如果要搜索中文,请指定为1
ngram_chars = U+3000..U+2FA1F ## 需要分词的字符,如果要搜索中文,打开这行
html_strip = 0 ## html标记清理,是否从输出全文数据中去除HTML标记
}
indexer
{
# memory limit, in bytes, kiloytes (16384K) or megabytes (256M)
# optional, default is 128M, max is 2047M, recommended is 256M to 1024M
mem_limit = 128M ## 建立索引的时候,索引内存限制
}
searchd
{
listen = 9312 ## 监听端口
listen = 9306:mysql41
log = D:/sphinx/log/searchd.log ## 监听日志
query_log = D:/sphinx/log/query.log ## 查询日志
pid_file = D:/sphinx/log/searchd.pid ## ## 进程id文件
read_timeout = 5 ## 客户端读超时时间
client_timeout = 300 ## 客户端持久连接超时时间,即客户端读一次以后,持久连接,然后再读一次,中间这个持久连接的时间
max_children = 30 ## 并行执行搜索的数目
persistent_connections_limit = 30
preopen_indexes = 1 ## 索引预开启,是否强制重新打开所有索引文件
unlink_old = 1 ## 索引轮换成功之后,是否删除以.old为扩展名的索引拷贝
max_packet_size = 8M ## 网络通讯时允许的最大的包的大小
max_filters = 256 ## 每次查询允许设置的过滤器的最大个数
max_filter_values = 4096 ## 单个过滤器允许的值的最大个数
max_batch_queries = 32 ## 每次批量查询的查询数限制
workers = threads # for RT to work 多处理模式(MPM)。 可选项;可用值为none、fork、prefork,以及threads。 默认在Unix类系统为form,Windows系统为threads。
}
(2.X版本要设置charset_type = utf-8否则无法识别中文3.X忽略此句话)
配置完后使用命令控制台切换到bin目录
执行命令:indexer -c sphinx.conf test1
indexer创建索引命令 test1索引名称
使用完整版的配置文件执行命令后会有些一些路径报错根据提示修改路径即可
命令执行成功如下:
生成的索引文件如下:
3开启sphinx服务
切换到bin目录后执行searchd.exe指令
执行结果如下表示成功:
将etc下的测试数据example.sql导入到数据库中记得增加几条带中文的测试数据
连接数据库查看索引:
(注意查看数据库要使用另外一个端口9306端口 listen = 9306:mysql41监听MySQL)
mysql -h localhost -P 9306
查看建立的索引表:
show tbales;
到此说明成立建立索引
4php使用sphinx
将api下的sphinxapi.php复制到php网站目录下
注意端口要要sphinx配置文件一致
<?php
require 'sphinxapi.php';
$s = new SphinxClient();
$s->SetServer('127.0.0.1', 9312);
$s->_limit = 2000;
//var_dump($s);
$keyword = "中文";//要搜索的关键字
$index = 'test1';//索引名称
$result = $s->Query($keyword,$index);
var_dump($result["matches"]);
var_dump(array_keys($result["matches"]));//打印出索引id
执行php文件成功的话就会显示出如此下信息: