Sphinx 文档,Sphinx
2.1安装在GNU/Linux/unix系统上
2.1.1 sphinx安装2.1.2.sfc安装(见另文)2.1.3.coreseek安装(见另文)2.2安装在windows下。
3.配置示例4。应用
4.1使用API调用在CLI 4.2上进行测试
5.附录
1.1简介。狮身人面像
1.1.斯芬克斯是什么?
Sphinx是俄罗斯人Andrew Aksyonoff开发的全文搜索引擎。它旨在为其他应用程序提供高速、低空间占用、高相关性的全文搜索功能。Sphinx可以很容易地与SQL数据库和脚本语言集成。目前系统内置了对MySQL和PostgreSQL数据库数据源的支持,还支持从标准输入中读取特定格式的XML数据。通过修改源代码,用户可以自己添加新的数据源(例如,其他类型的DBMS的本机支持)
1.2.斯芬克斯的特征
高速索引(在当代CPU上,峰值性能可达10mb/s);高性能搜索(对于24gb的文本数据,每次搜索的平均响应时间不到0.1秒);可以处理海量数据(目前已知在单个CPU系统上可以处理超过100 GB的文本数据和100 M的文档);提供了一种优秀的相关算法——基于短语相似度和统计的复合排序方法(BM25)。支持分布式搜索;支持短语搜索,提供文档摘要生成,作为MySQL的存储引擎提供搜索服务;支持布尔、短语、词语相似度等检索模式;文档支持多个全文搜索字段(最多32个);文档支持多个附加属性信息(如分组信息、时间戳等。);支持分词;
1.3.Sphinx中文分词
中文全文检索不同于英文等拉丁系列,按空格等特殊字符断词,而中文按语义分词。目前大部分数据库都不支持中文全文检索,比如Mysql。所以国内有一些中文全文搜索的Mysql插件,最好的是hightman的中文分词。Sphinx如果需要中文全文检索,需要一些插件来补充。我知道的插件有coreseek和SFC。
Coreseek是sphinx使用最广泛的中文全文搜索,它提供了一个为Sphinx设计的中文分词包LibMMSeg。它还提供了几个系统的二进制发行版,包括rpm、deb和windows下的二进制包。此外,coreseek还为sphinx贡献了以下内容:
GBK编码的数据源支持使用志豪蔡氏MMSEG算法的中文分词机器中文用户手册(该中文手册为sphinx 3354的国内新手用户,尤其是英语不好的用户提供了极大的便利)。sfc(sphinx-for-chinese)是网友happy提供的另一款中文分词插件。它的汉语词典用的是xdict。据其介绍,经过测试,目前的版本基本可以达到UTF-8英语(Linux测试平台)的一半索引速度,也就是官方宣称速度的一半。(时间主要花在分词上)。现在提供了与最新版本的sphinx (sphinx 0.9.10)同步的sphinx-for-chinese-0.9.10-dev-r2006.tar.gz。这个版本增加了sql_attr_string,我自己测试过。安装配置非常方便。开心哥在分词方面还有一个贡献:3354 php-MMSEG,这是一个针对中文分词的php扩展库。
在此,向上述两位作者致以崇高的敬意。
另外,如果你对中文分词不感兴趣。或者只需要实现像sql这样的函数,比如:select * from product where prodname like“% mobile phone %”。斯芬克斯也不会让你失望。这可能是官网对中文的简单实现:3354直接词索引。而且搜索速度还不错_
本文将对上述三个中文应用进行测试,并记录为文档,这可能是本文的重点。
2.安装配置示例。
2.1安装在GNU/Linux/unix系统上
Sphinx可以通过两种方式应用于mysql:
API调用,如使用PHP和java的API函数或方法查询等。优点是mysql无需重新编译,服务器进程“低耦合”,程序调用灵活方便;
缺点是,如果有一个现有的搜索程序,有些程序需要修改。推荐给程序员。
使用插件方法(sphinxSE)将sphinx编译成mysql插件,并使用特定的sql语句进行检索。它的特点是很容易在sql中组合,可以直接向客户端返回数据。
不需要进行第二次查询(注意),只需要在程序中修改对应的sql即可,但这对于使用框架开发的程序来说是不方便的,比如ORM。另外,mysql需要重新编译,需要mysql-5.1或以上版本。
支持插件存储。系统管理员可以使用这种方法。
二次查询注意:到目前发布版本——sphinx-0.9.9,sphinx只能返回记录的ID,而不是要查询的sql数据,所以需要根据这些ID再次查询数据库。
sphinx 0.9.10的开发版本已经可以存储这些文本数据。笔者之前试过,性能和存储效果都不好。毕竟正式版还没发布。
本文采用第一种方法。
要在*nix系统下安装,您首先需要以下软件支持。
软件环境:
操作系统:Centos-5.2数据库:mysql-5.0.77-3.el5 mysql-devel(如果要使用sphinxSE插件存储请使用mysql-5.1或以上版本)编译软件:gcc gcc-c autoconf automake Sphinx:Sphinx-0 . 9 . 9(最新稳定版)
安装:
[root @ localhost ~]# yum install-y MySQL MySQL-devel[root @ localhost ~]# yum install-y automake autoconf[root @ localhost ~]# CD/usr/local/src/[root @ localhost src]# wget http://www . sphinx search . com/downloads/sphinx-0 . 9 . 9 . tar . gz[root @ localhost src]# tar zxvf sphinx-0 . 9 . 9 . tar . gz[root @ localhost/configureprefix=/usr/local/sphinx #注意:这里,Sphinx已经默认支持MySQL[root @ localhost Sphinx-0 . 9 . 9]# make make install #,可以忽略“警告”。
安装完成后,检查/usr/local/sphinx下是否有三个目录bin etc var。如果是,说明安装正确!
2.1.2.sfc安装(点击进入)
2.1.3.coreseek安装(点击进入)
3.配置示例
3.1.数据来源。
这里我们使用mysql作为数据源。详情如下:
Mysql服务器:192.168.1.10
Mysql数据库:测试
Mysql表:test.sphinx_article
mysql desc斯芬克斯_ article
——— ——————— —— — ——— —————-
Field Type Null Key Default Extra
——— ——————— —— — ——— —————-
id int(11)unsigned NO PRI NULL auto _ increment
title varchar(255) NO
cat _ id tinyint(3)unsigned NO MUL
member _ id int(11)unsigned NO MUL
content longtext NO
created int(11) NO MUL
——— ——————— —— — ——— —————-
一组6行(0.00秒)
3.2.配置文件
[root @ localhost ~]# CD/usr/local/sphinx/etc #转到Sphinx的配置文件目录[root @ localhost etc]# cpsphinx . conf #创建新的Sphinx配置文件[root @ localhost etc]# vimsphinx . conf #编辑sphinx.conf。
特定实例配置文件:
# # # # #索引源# # # # # # #
源文章_src
{
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搜索代码。这一点要特别注意。很多人找不到中文的,但是数据库的代码是GBK或者其他非UTF8。
Sql _ query=select ID,title,cat _ ID,member _ ID,content,从sphinx _ article # # # # # # SQL创建,用于获取数据
# # # # #以下属性用于过滤或条件查询# # # # # # # #
SQL _ attr _ uint=cat _ id # # # # # #无符号整数属性
sql_attr_uint=成员id
SQL _ attr _ timestamp=已创建# # # # # # Unix时间戳属性
SQL _ query _ info=select * from sphinx _ article其中id=$ id # # # # # # #用于测试命令接口(CLI)调用
}
# # #索引# # #
索引文章
{
Source=article_src #### #声明索引来源
path=/usr/local/sphinx/var/data/article # # # # #索引文件的存储路径和索引的文件名。
docinfo=extern #####文档信息存储方式
mlock=0 ###缓存数据内存锁定
形态学=无####形态学(对中文无效)
min_word_len=1 ####索引的词最小长度
charset_type=utf-8 #####数据编码
##### 字符表,注意:如使用这种方式,则狮身人面像会对中文进行单字切分,
##### 即进行字索引,若要使用中文分词,必须使用其他分词插件如证监会coreseek
charset_table=U FF10.U FF19- 0.9, 0.9、U FF41.U FF5A- a.z,U FF21.U FF3A- a.z,\
A.Z- a.z,a.z,U 0149,U 017F,U 0138,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 0100- U 0101,U 0101,\
U 0102- U 0103,U 0103,U 0104- U 0105,U 0105,U 0106- U 0107,U 0107,U 0108- U 0109,\
U 0109,U 010A- U 010B,U 010B,U 010C- U 010D,U 010D,U 010E- U 010F,U 010F,\
U 0110- U 0111,U 0111,U 0112- U 0113,U 0113,U 0114- U 0115,U 0115,\
U 0116- U 0117,U 0117,U 0118- U 0119,U 0119,U 011A- U 011B,U 011B,U 011C- U 011D,\
U 011D,U 011E- U 011F,U 011F,U 0130- U 0131,U 0131,U 0132- U 0133,U 0133,\
U 0134- U 0135,U 0135,U 0136- U 0137,U 0137,U 0139- U 013A,U 013A,U 013B- U 013C,\
U 013C,U 013D- U 013E,U 013E,U 013F- U 0140,U 0140,U 0141- U 0142,U 0142,\
U 0143- U 0144,U 0144,U 0145- U 0146,U 0146,U 0147- U 0148,U 0148,U 014A- U 014B,\
U 014B,U 014C- U 014D,U 014D,U 014E- U 014F,U 014F,U 0150- U 0151,U 0151,\
U 0152- U 0153,U 0153,U 0154- U 0155,U 0155,U 0156- U 0157,U 0157,U 0158- U 0159,\
U 0159,U 015A- U 015B,U 015B,U 015C- U 015D,U 015D,U 015E- U 015F,U 015F,\
U 0160- U 0161,U 0161,U 0162- U 0163,U 0163,U 0164- U 0165,U 0165,U 0166- U 0167,\
U 0167,U 0168- U 0169,U 0169,U 016A- U 016B,U 016B,U 016C- U 016D,U 016D,\
U 016E- U 016F,U 016F,U 0170- U 0171,U 0171,U 0172- U 0173,U 0173,U 0174- U 0175,\
U 0175,U 0176- U 0177,U 0177,U 0178- U 00FF,U 00FF,U 0179- U 017A,U 017A,\
U 017B- U 017C,U 017C,U 017D- U 017E,U 017E,U 0410.U 042F- U 0430.U 044F,\
U 0430.U 044F,U 05D0.U 05EA,U 0531.U 0556- U 0561.U 0586,U 0561.U 0587,\
U 0621.U 063A、U 01B9、U 01BF、U 0640.U 064A、U 0660.U 0669,U 066E,U 066F,\
U 0671.U 06D3,U 06F0.U 06FF,U 0904.U 0939,U 0958.U 095F,U 0960.U 0963,\
U 0966.U 096F、U 097B.U 097F,U 0985.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 1900.1938年,1946年.U 194F,U A800.U A805,U A807.U A822,U 0386- U 03B1,\
U 03AC- U 03B1,U 0388- U 03B5,U 03AD- U 03B5,U 0389- U 03B7,U 03AE- U 03B7,\
U 038A- U 03B9,U 0390- 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 0391.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 3400.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
min_prefix_len=0 #最小前缀
min_infix_len=1 #最小中缀
ngram_len=1 #对于非字母型数据的长度切割
#加上这个选项,则会对每个中文,英文字词进行分割,速度会慢
#ngram_chars=U 4E00.U 9FBF,U 3400.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
}
######### 索引器配置#####
分度器
{
mem_limit=256M #####内存限制
}
###########斯芬克斯服务进程########
搜索d
{
#听=9312 ###监听端口,在此版本开始,官方已在互联网地址编码分配机构(互联网号码分配机构)获得正式授权的9312端口,以前版本默认的是3312
log=/usr/local/sphinx/var/log/searchd。日志# # # #服务进程日志,一旦狮身人面像出现异常,基本上可以从这里查询有效信息,轮换(旋转)出的问题一般可在此寻到答案
query _ log=/usr/local/sphinx/var/log/query。日志# # #客户端查询日志,笔者注:若欲对一些关键词进行统计,可以分析此日志文件
read_timeout=5 #请求超时
max_children=30 ###同时可执行的最大搜索d进程数
PID _ file=/usr/local/sphinx/var/log/searchd。管道仪表流程图# # # # #进程身份文件
max_matches=1000 ###查询结果的最大返回数
无缝_旋转=1 ###是否支持无缝切换,做增量索引时通常需要
}
3.3、建立索引文件
[root @ localhost sphinx]# bin/indexer-c etc/sphinx。主配置文件文章###建立索引文件的命令
斯芬克斯0.9.9版(r2117)
版权所有2001年至2009年,安德鲁阿克肖诺夫
使用配置文件“etc/斯芬克斯。conf"…
索引索引"文章"…
收集了1000个文档0.2兆字节
已排序0.4兆位,完成99.6%
总共1000个文件,210559字节
总计3.585秒,58723字节/秒,278.89文档/秒
总共2次读取,0.031秒,1428.8 kb/调用平均值,15.6毫秒/调用平均值
总共11次写入,0.032秒,671.6 kb/调用平均值,2.9毫秒/调用平均值
[root@localhost sphinx]#
出现以上代表已经索引成功,若不成功的话请根据提示的错误修改配置文件,或到这里提问,我看到后会尽快解决
4.应用
4.1 在硬币指示器(硬币水平指示器的缩写)命令行界面(批处理脚本的命令行界面)上测试
在上一步中,我们建立了索引,现在我们对刚建立的索引进行测试。测试有两种方式:CLI端和应用程序接口调用
在硬币指示器(硬币水平指示器的缩写)命令行界面(批处理脚本的命令行界面)端上命令测试是使用狮身人面像自带的搜索命令:搜索
###### 在文章索引上检索"北京"关键词########
[root @ localhost sphinx]# bin/search-c etc/sphinx。主配置文件北京
斯芬克斯0.9.9版(r2117)
版权所有2001年至2009年,安德鲁阿克肖诺夫
使用配置文件“etc/斯芬克斯。conf"…
索引"文章":查询北京:在0.008秒内返回995个匹配项中的995个
显示匹配项:
1.文档=76,权重=2,类别标识=1,成员标识=2,创建时间=2010年一月23日星期六19:05:09
id=76
title=??
cat_id=1
member_id=2
内容=????
已创建=1264244709
2.文档=85,权重=2,类别标识=1,成员标识=2,创建时间=2010年一月23日星期六19:05:09
id=85
title=??
cat_id=1
member_id=2
内容=???????
已创建=1264244709
….这里省略….
20.文档=17,权重=1,类别标识=1,成员标识=2,创建时间=2010年一月23日星期六19:05:09
id=17
title=??
cat_id=1
member_id=2
内容=???????
已创建=1264244709
单词:
1.北京:995份文件,999次点击
至此,可以看到,我们已经检索出所有有关"北京"的信息
注意:这里我使用的是油灰的客户端,在客户端编码设置的是utf-8,这个是测试的前提条件
4.2 API调用
在本例中,我使用服务器端编程语言(专业超文本预处理器的缩写)的美国石油学会(美国石油协会)来测试,在测试前,先启动狮身人面像服务进程,并对摘录的防火墙做好9312端口的开放
[root @ localhost sphinx]# bin/searchd-c etc/sphinx。会议# # #使狮身人面像在后台运行
[1] 5759
[root @ localhost Sphinx]# Sphinx 0。9 .9版(r2117)
版权所有2001年至2009年,安德鲁阿克肖诺夫
使用配置文件“etc/斯芬克斯。conf"…
监听所有接口,端口=9312
[1]Done bin/searchd-c etc/sphinx。主配置文件
服务器端编程语言(专业超文本预处理器的缩写)测试代码:
?服务器端编程语言(专业超文本预处理器的缩写)
header( Content-type:text/html;charset=utf-8 );
?form name=" form 1 " method=" get " action="
标签
输入/标签
标签
输入type=" Submit " name=" Submit " value=" sphinx搜索"
/标签
/表单
?服务器端编程语言(专业超文本预处理器的缩写)
$ keyword=$ _ GET[ keyword ];
if(trim($ keyword)=){
死(请输入关键词);
}
否则{
回声关键词是:.$关键字
}
需要“斯芬克斯API。PHP”;
$ cl=new sphinx client();
$cl- SetServer(192.168.1.150 ,9312);//注意这里的主机
# $ cl-SetMatchMode(SPH _匹配_扩展);//使用多字段模式
//dump($ cl);
$ index="文章
$res=$cl- Query($keyword,$ index);
$ err=$ cl-GetLastError();
转储(RES);
函数转储($var)
{
回声前
var _ dump($ var);
回显/前置
}
?
检索"北京"转储后的结果是如下:
数组(10) {
[错误]=
字符串(0)""
[警告]=
字符串(0)""
[状态]=
int(0)
[fields]=
数组(2) {
[0]=
字符串(5)"标题"
[1]=
字符串(7)"内容"
[attrs]=
数组(3) {
[cat_id]=
int(1)
[member_id]=
int(1)
[已创建]=
int(2)
[匹配]=
数组(20) {
[76]=
数组(2) {
[重量]=
字符串(1)"2"
[attrs]=
数组(3) {
[cat_id]=
字符串(1)"1"
[member_id]=
字符串(1)"2"
[已创建]=
字符串(10) 1264244709
.这里省略.
[17]=
数组(2) {
[重量]=
字符串(1)"1"
[attrs]=
数组(3) {
[cat_id]=
字符串(1)"1"
[member_id]=
字符串(1)"2"
[已创建]=
字符串(10) 1264244709
[总计]=
字符串(3)"995"
[total_found]=
字符串(3)"995"
[时间]=
字符串(5) 0.008
[单词]=
数组(1) {
[北京]=
数组(2) {
[docs]=
字符串(3)"995"
[hits]=
字符串(3)"999"
至此服务器端编程语言(专业超文本预处理器的缩写)已可调用出结果!
这是本人对狮身人面像写的入门手册,也为自己存档使用。为写本文,特重新安装了一遍斯芬克斯,并新建关系型数据库表加入1000条记录,动手重复了一下所有
过程。如有错误或疑问请到以下地址反馈,谢谢!
欢迎到狮身人面像中文站(www.sphinxsearch.org)讨论狮身人面像的相关问题,交流你我的思想!
欢迎查阅我所写的狮身人面像的其他相关文章:斯芬克斯中文分词,斯芬克斯高级应用,斯芬克斯常见问题解答,斯芬克斯服务架构
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。