赫赫小虾 2018-04-16
下载地址:
http://sphinxsearch.com/downloads/archive/
解压收编译配置
$ ./configure --prefix=/usr/local/sphinx --with-mysql
$ make
$ make install
$ cd /usr/local/sphinx/etc/
$ cp sphinx.conf.dist sphinx.conf
######################################################################
使用sphinx自带的例子
导入测试数据
$ mysql-u root -p < /usr/local/sphinx/etc/example.sql
设置数据库信息
$ vim sphinx.conf
##### 索引源 ###########
source src1
{
type = mysql #####数据源类型
sql_host = localhost ######mysql主机
sql_user = root ########mysql用户名
sql_pass = pwd ############mysql密码
sql_db = test #########mysql数据库名
sql_port= 3306 ###########mysql端口
sql_query_pre = SET NAMES UTF8 ###mysql检索编码
####设置数据源
sql_query = sql_query = \
SELECT id, group_id, UNIX_TIMESTAMP(date_added) AS date_added, title, content \
FROM documents
}
设置索引
index test1
{
source = src1 ####声明索引源
path = /usr/local/sphinx/var/data/test1 #######索引文件存放路径及索引的文件名
docinfo = extern ##### 文档信息存储方式
}
生成索引
$ bin/indexer -c etc/sphinx.conf test1
php下调用shpinx进行搜索(这是源码api中php cli模式的用例,还有其它语言调用的相关用例)
$ cd /usr/local/software/sphinx-2.2.11-release
$ php test.php test
######################################################################
PHP调用demo
##### 索引源 ###########
source src1
{
type = mysql #####数据源类型
sql_host = 192.168.1.10 ######mysql主机
sql_user = root ########mysql用户名
sql_pass = pwd ############mysql密码
sql_db = test #########mysql数据库名
sql_port= 3306 ###########mysql端口
sql_query_pre = SET NAMES UTF8 ###mysql检索编码
sql_query = SELECT * FROM task ####### 获取数据的sql
#####以下是用来过滤或条件查询的属性############
####自定义返回的字段
sql_field_string = id
sql_field_string = name
}
### 索引 ###
index test1
{
source = article_src ####声明索引源
path = /usr/local/sphinx/var/data/article #######索引文件存放路径及索引的文件名
docinfo = extern ##### 文档信息存储方式
mlock = 0 ###缓存数据内存锁定
morphology = none
min_word_len = 1 #### 索引的词最小长度
charset_type = utf-8 #####数据编码
##### 字符表,注意:如使用这种方式,则sphinx会对中文进行单字切分,
##### 即进行字索引,若要使用中文分词,必须使用其他分词插件如 coreseek,sfc
}
######### 索引器配置 #####
indexer
{
mem_limit = 256M ####### 内存限制
}
############ sphinx 服务进程 ########
searchd
{
listen = 9312 ### 监听端口
log = /usr/local/sphinx/var/log/searchd.log #### 服务进程日志 ,一旦sphinx出现异常,基本上可以从这里查询有效信息,轮换(rotate)出的问题一般可在此寻到答案
query_log = /usr/local/sphinx/var/log/query.log ### 客户端查询日志,笔者注:若欲对一些关键词进行统计,可以分析此日志文件
read_timeout = 5 ## 请求超时
max_children = 30 ### 同时可执行的最大searchd 进程数
pid_file = /usr/local/sphinx/var/log/searchd.pid #######进程ID文件
max_matches = 1000 ### 查询结果的最大返回数
seamless_rotate = 1 ### 是否支持无缝切换,做增量索引时通常需要
}
生成索引(只生成test1索引文件)
$ bin/indexer -c etc/sphinx.conf test1
如果重建索引时守护进程正在运行,会报错,需要运行下面的指令,会重建索引并且重开守护进程
$ /usr/local/sphinx/bin/indexer -c /usr/local/sphinx/etc/test.conf --all --rotate
--all 参数表示将生成所有索引文件
searchd作为sphinx在服务器的守护进程
$ /usr/local/sphinx/bin/searchd -c /usr/local/sphinx/etc/sphinx.conf
停止
$ /usr/local/sphinx/bin/searchd -c /usr/local/sphinx/etc/sphinx.conf --stop
PHP端
<?php
require "sphinxapi.php"; //sphinx的api目录(如:/usr/local/software/sphinx-2.2.11-release/api/)
$cl = new SphinxClient();
$cl->setServer("localhost", 9312);
#$cl->setMatchMode(SPH_MATCH_EXTENDED); //使用多字段模式
$res = $cl->query($keyword, "test1");
//$err = $cl->getLastError();
$res = !empty($res['matches']) ? $res['matches'] : "";
print_r($res);
结果:
Array
(
[1] => Array
(
[weight] => 1557
[attrs] => Array
(
[name] => zhengzhou
)
)
[3] => Array
(
[weight] => 1557
[attrs] => Array
(
[name] => kaifeng-zhengzhou
)
)
)