配置实例
3.1、数据源。
这里我们采用 mysql的数据源。具体情况如下:
Mysql server:192.168.1.10
Mysql db :test
Mysql 表:test.sphinx_article
mysql> desc sphinx_article;
———– ——————— —— —– ——— —————-
| Field | Type | Null | Key | Default | Extra |
———– ——————— —— —– ——— —————-
| id | int() unsigned | NO | PRI | NULL | auto_increment |
| title | varchar() | NO | | | |
| cat_id | tinyint() unsigned | NO | MUL | | |
| member_id | int() unsigned | NO | MUL | | |
| content | longtext | NO | | | |
| created | int() | NO | MUL | | |
———– ——————— —— —– ——— —————-
rows in set (0.00 sec)
3.2、配置文件
* [root@localhost ~]#cd /usr/local/sphinx/etc #进入sphinx的配置文件目录
* [root@localhost etc]# cp sphinx.conf.dist sphinx.conf #新建Sphinx配置文件
* [root@localhost etc]# vim sphinx.conf #编辑sphinx.conf
具体实例配置文件:
##### 索引源 ###########
source article_src
{
type = mysql #####数据源类型
sql_host = 192.168.1.10 ######mysql主机
sql_user = root ########mysql用户名
sql_pass = pwd############mysql密码
sql_db = test #########mysql数据库名
sql_port= ###########mysql端口
sql_query_pre = SET NAMES UTF8 ###mysql检索编码,特别要注意这点,很多人中文检索不到是数据库的编码是GBK或其他非UTF8
sql_query = SELECT id,title,cat_id,member_id,content,created FROM sphinx_article ####### 获取数据的sql
#####以下是用来过滤或条件查询的属性############
sql_attr_uint = cat_id ######## 无符号整数属性
sql_attr_uint = member_id
sql_attr_timestamp = created ############ UNIX时间戳属性
sql_query_info = select * from sphinx_article where id=$id ######### 用于命令界面端(CLI)调用的测试
}
### 索引 ###
index article
{
source = article_src ####声明索引源
path = /usr/local/sphinx/var/data/article #######索引文件存放路径及索引的文件名
docinfo = extern ##### 文档信息存储方式
mlock = ###缓存数据内存锁定
morphology = none #### 形态学(对中文无效)
min_word_len = #### 索引的词最小长度
charset_type = utf- #####数据编码
##### 字符表,注意:如使用这种方式,则sphinx会对中文进行单字切分,
##### 即进行字索引,若要使用中文分词,必须使用其他分词插件如 coreseek,sfc
charset_table = U FF10..U FF19->.., .., U FF41..U FF5A->a..z, U FF21..U FF3A->a..z,\
A..Z->a..z, a..z, U , U 017F, U , U 00DF, U 00FF, U 00C0..U 00D6->U 00E0..U 00F6,\
U 00E0..U 00F6, U 00D8..U 00DE->U 00F8..U 00FE, U 00F8..U 00FE, U ->U , U ,\
U ->U , U , U ->U , U , U ->U , U , U ->U ,\
U , U 010A->U 010B, U 010B, U 010C->U 010D, U 010D, U 010E->U 010F, U 010F,\
U ->U , U , U ->U , U , U ->U , U , \
U ->U ,U , U ->U , U , U 011A->U 011B, U 011B, U 011C->U 011D,\
U 011D,U 011E->U 011F, U 011F, U ->U , U , U ->U , U , \
U ->U ,U , U ->U , U , U ->U 013A, U 013A, U 013B->U 013C, \
U 013C,U 013D->U 013E, U 013E, U 013F->U , U , U ->U , U , \
U ->U ,U , U ->U , U , U ->U , U , U 014A->U 014B, \
U 014B,U 014C->U 014D, U 014D, U 014E->U 014F, U 014F, U ->U , U , \
U ->U ,U , U ->U , U , U ->U , U , U ->U ,\
U ,U 015A->U 015B, U 015B, U 015C->U 015D, U 015D, U 015E->U 015F, U 015F, \
U ->U ,U , U ->U , U , U ->U , U , U ->U , \
U ,U ->U , U , U 016A->U 016B, U 016B, U 016C->U 016D, U 016D, \
U 016E->U 016F,U 016F, U ->U , U , U ->U , U , U ->U ,\
U ,U ->U , U , U ->U 00FF, U 00FF, U ->U 017A, U 017A, \
U 017B->U 017C,U 017C, U 017D->U 017E, U 017E, U ..U 042F->U ..U 044F, \
U ..U 044F,U 05D0..U 05EA, U ..U ->U ..U , U ..U , \
U ..U 063A, U 01B9,U 01BF, U ..U 064A, U ..U , U 066E, U 066F, \
U ..U 06D3, U 06F0..U 06FF,U ..U , U ..U 095F, U ..U , \
U ..U 096F, U 097B..U 097F,U ..U 09B9, U 09CE, U 09DC..U 09E3, U 09E6..U 09EF, \
U 0A05..U 0A39, U 0A59..U 0A5E,U 0A66..U 0A6F, U 0A85..U 0AB9, U 0AE0..U 0AE3, \
U 0AE6..U 0AEF, U 0B05..U 0B39,U 0B5C..U 0B61, U 0B66..U 0B6F, U 0B71, U 0B85..U 0BB9, \
U 0BE6..U 0BF2, U 0C05..U 0C39,U 0C66..U 0C6F, U 0C85..U 0CB9, U 0CDE..U 0CE3, \
U 0CE6..U 0CEF, U 0D05..U 0D39, U 0D60,U 0D61, U 0D66..U 0D6F, U 0D85..U 0DC6, \
U ..U , U ..U 194F, U A800..U A805,U A807..U A822, U ->U 03B1, \
U 03AC->U 03B1, U ->U 03B5, U 03AD->U 03B5,U ->U 03B7, U 03AE->U 03B7, \
U 038A->U 03B9, U ->U 03B9, U 03AA->U 03B9,U 03AF->U 03B9, U 03CA->U 03B9, \
U 038C->U 03BF, U 03CC->U 03BF, U 038E->U 03C5,U 03AB->U 03C5, U 03B0->U 03C5, \
U 03CB->U 03C5, U 03CD->U 03C5, U 038F->U 03C9,U 03CE->U 03C9, U 03C2->U 03C3, \
U ..U 03A1->U 03B1..U 03C1,U 03A3..U 03A9->U 03C3..U 03C9, U 03B1..U 03C1, \
U 03C3..U 03C9, U 0E01..U 0E2E,U 0E30..U 0E3A, U 0E40..U 0E45, U 0E47, U 0E50..U 0E59, \
U A000..U A48F, U 4E00..U 9FBF,U ..U 4DBF, U ..U 2A6DF, U F900..U FAFF, \
U 2F800..U 2FA1F, U 2E80..U 2EFF,U 2F00..U 2FDF, U ..U 312F, U 31A0..U 31BF, \
U ..U 309F, U 30A0..U 30FF,U 31F0..U 31FF, U AC00..U D7AF, U ..U 11FF, \
U ..U 318F, U A000..U A48F,U A490..U A4CF
min_prefix_len = #最小前缀
min_infix_len = #最小中缀
ngram_len = # 对于非字母型数据的长度切割
#加上这个选项,则会对每个中文,英文字词进行分割,速度会慢
#ngram_chars = U 4E00..U 9FBF, U 3400..U 4DBF, U 20000..U 2A6DF, U F900..U FAFF,\
#U 2F800..U 2FA1F, U 2E80..U 2EFF, U 2F00..U 2FDF, U 3100..U 312F, U 31A0..U 31BF,\
#U 3040..U 309F, U 30A0..U 30FF, U 31F0..U 31FF, U AC00..U D7AF, U 1100..U 11FF,\
#U 3130..U 318F, U A000..U A48F, U A490..U A4CF
}
######### 索引器配置 #####
indexer
{
mem_limit = 256M ####### 内存限制
}
############ sphinx 服务进程 ########
searchd
{
#listen = 9312 ### 监听端口,在此版本开始,官方已在IANA获得正式授权的9312端口,以前版本默认的是3312
log = /usr/local/sphinx/var/log/searchd.log #### 服务进程日志 ,一旦sphinx出现异常,基本上可以从这里查询有效信息,轮换(rotate)出的问题一般可在此寻到答案
query_log = /usr/local/sphinx/var/log/query.log ### 客户端查询日志,笔者注:若欲对一些关键词进行统计,可以分析此日志文件
read_timeout = ## 请求超时
max_children = ### 同时可执行的最大searchd 进程数
pid_file = /usr/local/sphinx/var/log/searchd.pid #######进程ID文件
max_matches = ### 查询结果的最大返回数
seamless_rotate = ### 是否支持无缝切换,做增量索引时通常需要
}
3.3、建立索引文件
[root@localhost sphinx]# bin/indexer -c etc/sphinx.conf article ### 建立索引文件的命令
Sphinx 0.9.-release (r2117)
Copyright (c) -, Andrew Aksyonoff
using config file ‘etc/sphinx.conf’…
indexing index ‘article’…
collected docs, 0.2 MB
sorted 0.4 Mhits, 99.6% done
total docs, bytes
total 3.585 sec, bytes/sec, 278.89 docs/sec
total reads, 0.031 sec, 1428.8 kb/call avg, 15.6 msec/call avg
total writes, 0.032 sec, 671.6 kb/call avg, 2.9 msec/call avg
[root@localhost sphinx]#
出现以上代表已经索引成功,若不成功的话请根据提示的错误修改配置文件,或到这里提问,我看到后会尽快解决
.应用
4.1 在CLI上测试
在上一步中,我们建立了索引,现在我们对刚建立的索引进行测试。测试有两种方式:CLI端和API调用
在CLI端上命令测试是使用sphinx自带的搜索命令:search
###### 在article索引上检索 “北京”关键词 ########
[root@localhost sphinx]# bin/search -c etc/sphinx.conf 北京
Sphinx 0.9.-release (r2117)
Copyright (c) -, Andrew Aksyonoff
using config file ‘etc/sphinx.conf’…
index ‘article’: query ‘北京 ‘: returned matches of total in 0.008 sec
displaying matches:
. document=, weight=, cat_id=, member_id=, created=Sat Jan ::
id=
title=??????????
cat_id=
member_id=
content=????????????????????????????????
created=
. document=, weight=, cat_id=, member_id=, created=Sat Jan ::
id=
title=????????????
cat_id=
member_id=
content=????????
created=
…..这里省略….
. document=, weight=, cat_id=, member_id=, created=Sat Jan ::
id=
title=????????????
cat_id=
member_id=
content=??????????????????????????????????????????????????????????
created=
words:
. ‘北京’: documents, hits
至此,可以看到,我们已经检索出所有有关“北京”的信息
注意:这里我使用的是putty的客户端,在客户端编码设置的是utf-,这个是测试的前提条件
4.2 API调用
在本例中,我使用PHP的api来测试,在测试前,先启动sphinx服务进程,并对centos的防火墙做好9312端口的开放
[root@localhost sphinx]# bin/searchd -c etc/sphinx.conf & ### 使sphinx在后台运行
[]
[root@localhost sphinx]# Sphinx 0.9.9-release (r2117)
Copyright (c) -, Andrew Aksyonoff
using config file ‘etc/sphinx.conf’…
listening on all interfaces, port=
[] Done bin/searchd -c etc/sphinx.conf
php测试代码: SetServer(’192.168.1.150′, ); //注意这里的主机
#$cl->SetMatchMode(SPH_MATCH_EXTENDED); //使用多字段模式
//dump($cl);
$index=”article”;
$res = $cl->Query($keyword, $index);
$err = $cl->GetLastError();
dump($res);
function dump($var)
{
echo ‘
';var_dump($var);echo '
‘;
}
?>
检索“北京”dump后的结果是如下:
array() {
["error"]=>
string() “”
["warning"]=>
string() “”
["status"]=>
int()
["fields"]=>
array() {
[]=>
string() “title”
[]=>
string() “content”
}
["attrs"]=>
array() {
["cat_id"]=>
int()
["member_id"]=>
int()
["created"]=>
int()
}
["matches"]=>
array() {
[]=>
array() {
["weight"]=>
string() “″
["attrs"]=>
array() {
["cat_id"]=>
string() “″
["member_id"]=>
string() “″
["created"]=>
string() “″
}
}
…..这里省略…..
[]=>
array() {
["weight"]=>
string() “″
["attrs"]=>
array() {
["cat_id"]=>
string() “″
["member_id"]=>
string() “″
["created"]=>
string() “″
}
}
}
["total"]=>
string() “″
["total_found"]=>
string() “″
["time"]=>
string() “0.008″
["words"]=>
array() {
["北京"]=>
array() {
["docs"]=>
string() “″
["hits"]=>
string() “″
}
}
}
至此PHP已可调用出结果!
05-11 07:55