Windows下安装使用S phinxlamp服务
1使用PHP+Sphinx建立高效的站内搜索引擎
1. 为什么要使用S p hinx
假设你现在运营着一个论坛,论坛数据已经超过100W,很多用户都反映论坛搜索的速度非常慢,那么这时你就可以考虑使用S p hinx了(当然其他的全文检索程序或方法也行)。
2. Sphinx是什么
Sphinx由俄罗斯人An drew Aksyono ff 开发的高性能全文搜索软件包,在GPL与商业协议双许可协议下发行。
全文检索是指以文档的全部文本信息作为检索对象的一种信息检索技术。检索的对象有可能是文章的标题,也有可能是文章的作者,也有可能是文章摘要或内容。
3. Sphinx的特性
l 高速索引 (在新款CPU上,近10 MB/秒);
l 高速搜索 (2-4G的文本量中平均查询速度不到0.1秒);
l 高可用性 (单CPU上最大可支持100 GB的文本,100M文档);
l 提供良好的相关性排名
l 支持分布式搜索;
l 提供文档摘要生成;
l 提供从MySQ L内部的插件式存储引擎上搜索
l 支持布尔,短语, 和近义词查询;
l 支持每个文档多个全文检索域(默认最大32个);
l 支持每个文档多属性;
l 支持断词;
l 支持单字节编码与U TF-8编码;
4. 下载并安装Sp hinx
打开网址see k/news/7/52/ 到适合自己的操作系统的版本,比如我是Windows那么我就可以下载C oresee k Win32通用版本,Linux下可以下载源码包,自己编译安装。这里解释下为什么我们下载的程序叫Coreseek,Coresee k是基于Sp hinx开发的一款软件,对Sphinx做了一些改动,在中文方面支持得比Sphi nx好,所以我们使用之。
下载完成后,将程序解压到你想解压的地方,比如我就想解压到E盘根目录,之后修改目录名为Coreseek,大功告成Coreseek安装完成了,安装的目录是在E:\coresee k\。
5. 使用Sphin x
我要使用Sphi nx需要做以下几件事
1) 首先得有数据
2) 建立Sphin x配置文件
3) 生成索引
4) 启动Sphin x
5) 使用之(调用api或search.exe程序进行查询)
第1件:(导入数据)
我们建立测试所需要用到得数据库、表以及数据,篇幅有限,这些在附件中都有,下载后导入My SQL即可。
第2件:(建立配置文件)
接下来我们需要建立一个Sp hinx的配置文件 E:\coresee k\f,将其内容改为下面这些:
sourcemysql
{
type = mysql
sql_hos t = localho st
sql_use r = root sql_pas s =
sql_db = test sql_por t = 3306 sql_que ry_pre = SET NAMES utf8
sql_que ry = SELECT
id,addtime,title,content FROM post
sql_att r_time stamp = addtime
}
index mysql
{
source = mysql
path =
E:/coresee k/var/data/mysql
charset_dictp ath = E:/coresee k/etc/
charset_type = zh_cn.utf-8
}
searchd
{
listen = 9312
max_mat ches = 1000
pid_fil e =
下载mysql为什么下载不了E:/coresee k/var/log/searchd_mysql.pid
log =
E:/coresee k/var/log/searchd_mysql.log
query_l og =
E:/coresee k/var/log/query_m ysql.log
}
先讲下这个配置文件中每项的含义。
sourcemysql{} 定义源名称为m y sql,也可以叫其他的,比如:sourcexxx{}
type 数据源类型
sql_* 数据相关的配置,比如sql_h ost,sql_pass什么的,这些不解释鸟
sql_que ry 建立索引时的查询命令,在这里尽可能不使用where或grou p by,将where与group b y的内容交给sphinx,由sphinx进行条件过滤与group by效率会更高,注意:select的字段必须包括一个唯一主键以及要全文检索的字段,where中要用到的字段也要selec t出来
sql_que ry_pre在执行sql_query前执行的sql命令, 可以有多条
sql_att r 以这个开头的配置项,表示属性字段,在where,orderby,groupby中出现的字段要分别定义一个属性,定义不同类型的字段要用不同的属性名,比如上面的sq l_attr_timestamp就是时间戳类型。
index mysql{} 定义索引名称为m ysql,也可以叫其他的,比如:index xxx{}
source关联源,就是sourc e xxx定义的。
path 索引文件存放路径,比如:E:/coresee k/var/data/mysql 实际存放在E:/coresee k/var/data/目录,然后创建多个名称为mysq l后缀却不同的索引文件
charset_dictp ath 指明分词法读取词典文件的位置,当启用分词法时,为必填项。在使用Lib M M Seg作为分词库时,需要确保词典文件uni.lib在指定的目录下
charset_type字符集,比如charset_typ e = zh_cn.gbk
searchd{} sphinx守护进程配置
listen监听端口
max_mat ches最大匹配数,也就是查的数据再多也只返回这里设置的1000条
pid_fil e pid文件路径
log全文检索日志
query_l og查询日志
好了,配置文件就这样,配置的参数还有很多,大家可以自己查文档。
第3件:(生成索引)
开始 -> 运行 -> 输入cmd回车,打开命令行工具
e:\coresee k\bin\indexer --confige:\coresee k\f --all
这一串东西其实就是调用in dexer程序来生成所有索引
如果只想对某个数据源进行索引,则可以这样:e:\coresee k\bin\indexer --confige:\coreseek\f 索引名称(索引名称指配置文件中所定义的)
--config,--all这些都是i ndexe r程序的参数,想了解更多参数的朋友可以查看文档
运行命令后如果你没看到FA TAL,ERROR这些东西,那么索引文件就算生成成功了,比如
我看到得就是
………省略………
using configfile 'e:\coresee k\f'...
indexin g index 'mysql'...
collected 4 docs, 0.0 MB
………省略………
第4件:(启动Sphin x)
同样命令行下
e:\coresee k\bin\searchd --confige:\coresee k\f
运行后提示了一大堆东西
using configfile 'e:\coresee k\f'...
listeni ng on all interfa ces, port=9312
accepti ng connecti ons
不用管这些鸟文是啥意思,反正Sphin x是启动好了。
现在有一串鸟文的这个命令行是不能关的,因为关了Sphi nx也就关了,如果觉得这样不爽,可以将Sphi nx安装成系统服务,在后台运行。
安装系统服务只需在命令行中输入以下命令
e:\coresee k\bin\searchd --confige:\coresee k\f --install
安装之后记得启动这个服务,不会启动那我没法,自己googl e。
第5步:(使用Sphin x)
在web根目录下建立一个s earch目录(当然不在根目录也行,同样目录名也可以随取),复制E:\coresee k\api\ sphinxa pi.php文件到s earch目录(sphinxa pi.php这个是s phinx官方提供的api),开始php程序的编写。
在search目录建立一个文件,名字叫啥都行,我管它叫ind ex.php,其内容如下
<?php
include 'sphinxa pi.php'; // 加载Sphin x API
$sc = new SphinxClient(); // 实例化Api
$sc->setServ e r('localho st', 9312); // 设置服务端,第一个参数sp hi nx服务器地址,第二个sphi nx 监听端口
$res = $sc->query('sphinx', 'mysql'); // 执行查询,第一个参数查询的关键字,第二个查询的索引名称,mysql索引名称(这个也是在配置文件中定义的),多个索引名称以,分开,也可以用*表示所有索引。
print_r($res);
打印结果:
Array
(
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论