Sphinx全文检索之PHP使用教程

一、Sphinx简介

1. Sphinx是什么?

中文名:全文索引引擎。只支持英文和俄文。但是只要有相应的语言包也可支持任何语言。国内有一团队在Sphinx基础上封装了一个带中文包的软件:coreseek。

2. 为什么要用Sphinx?

在mysql数据库中,对于如下sql语句,select * from xxx where like xxx ‘%xxx‘; (以%开头的like查询),无法使用到任何索引优化,导致如果数据量非常大,查询速度会非常慢。而这种sql语句在很多功能中都要用到,如根据歌词查询歌曲,根据剧情查询电影等。如果要加快查询只能使用第三方软件,Sphinxlucence。mysql中也提供了全文索引的功能,但是有两个问题:(1)只有myisam引擎支持(2)对中文支持不好。不过现在最新的mysql5.6版本中的innodb1.2的版本也同样支持全文索引。

3. Sphinx的使用原理

(1)先创建数据源。
(2)根据数据源创建索引,使用分词技术。
(3)php把查询的关键词给Sphinx服务器,Sphinx根据关键词查找到关键字在mysql表里面的记录的id.Sphinx把id返回给php查询端。
(4)php根据返回的id,查询mysql服务器。

二、安装使用

1. 下载,进行解压

官网下载:http://www.Sphinxsearch.com

支持中文分词:http://www.coreseek.com

解压后拷贝到指定的目录,一般和其他的环境程序在同一级目录(便于管理)

2. 拷贝配置文件

把etc目录下面的csft_mysql.conf文件拷贝到上一级目录,并改名为sphinx.conf

三、使用配置

1. 对查询数据创建索引

主要是配置sphinx.conf配置文件

(1)配置数据源(被查询的数据,就是sql语句执行的结果)

配置语法:

source 数据源名称 {

}

注意:在一个配置文件中,可以配置多个数据源。

(2)配置数据源生成的索引文件存放的位置。

配置语法:

index 索引的名字 {

}

注意:该索引必须与一个数据源相对应。

(3)配置Sphinx服务器的信息

2. 创建索引

执行Sphinx下的一个程序 indexer.exe –c 配置文件(全路径) --all | 索引的名字 (--all:为配置文件中所有的索引创建索引文件。也可以使用索引的名字只为某一个索引创建索引文件)

(1)以管理员的方式打开cmd窗口,执行indexer.exe命令。

(2)查看创建的索引文件。

3. 启动Sphinx服务器

(1)把Sphinx软件安装为一个系统一个服务。

语法:searchd.exe –c 配置文件 --install

可以通过 searchd --help 查看帮助

(2)启动该服务。

查看端口是否启动:

4. 通过php查询使用

(1)在php使用中,需要一个Sphinx的一个接口文件。

使用Sphinx时,需要把sphinxapi.php文件拷贝到项目中来即可。

(2)代码如下。

require ‘sphinxapi.php‘;
// 使用Sphinx来完成查询
$sc = new SphinxClient();             // 生成客户端
$sc->setServer(‘localhost‘, 9312);    // 设置服务器
// $sc->query(‘查询的关键词‘, 索引文件的名称);
$keyword="电影";
$indexname =‘movie‘;
$res = $sc->query($keyword,$indexname);
$ids   = $res[‘matches‘];
$id = array_keys($ids);
$id = implode(‘,‘,$id);
mysql_connect("localhost",‘root‘,‘root‘);
mysql_query(‘use php‘);
mysql_query(‘SET NAMES UTF8‘);
$sql="select id,title,description from movie where id in($id)";
$res = mysql_query($sql);
$list=array();
while($row=mysql_fetch_assoc($res)){
    $list[]=$row;
}
foreach($list as $v){
    echo $v[‘title‘].‘<br/>‘.$v[‘description‘].‘<hr>‘;
}

四、匹配模式

1. SPH_MATCH_ALL:完全匹配所有的词

如“冬天 的 雪”,并不会匹配 “我爱冬天”,但可以匹配 “我的朋友,爱冬天,和雪”。

因为“冬天的雪” 被分成 “冬天”,“的”,“雪”三个词,匹配条件是同时包含这三个词,“我爱冬天”里只包含一个“冬天”

2. SPH_MATCH_PHRASE:必须匹配整个短语

如“冬天的雪”,不会匹配 “我的朋友,爱冬天,和雪”,虽然都包含同样的需要严格匹配不再健忘,只匹配“冬天的雪”

3. SPH_MATCH_ANY:匹配任意一个词

如“冬天 的 雪”,并会匹配 “我爱冬天”。

"冬天的雪“ -》 ”冬天“ ”的“ ”雪“

因为“我爱冬天”里有一个“冬天”相匹配。

4. SPH_MATCH_EXTENDED:支持一些扩展的语法

支持 @字段 查询

如,查询title包含 abc , content 包含 bcd的:

‘@title abc @content bcd‘

SPH_MATCH_BOOLEAN:与,或,非,分组 &,or,!,()

如:hello | world

查询“手机”,或“冬天”

五、查到得关键词添加样式显示

主要使用:buildExcerpts:创建文档摘要,对关键词添加样式显示。

六、增加索引

1. 增量索引的原理

2. 实现方式

(1)新建一张表,记录一下上次已经创建好索引的最后一条记录的id
(2)当索引时,然后从数据库中取出所有大于id的数据,这些就是新的数据然后创建一个小的索引文件。
(3)把增量这部分数据生成的小的索引合并到主索引文件上去。
(4)把最后一条记录的id更新到第一步创建的表中。

3. 实现步骤

(1)创建一个表,用于记录创建好索引的最后一条记录的id

(2)修改Sphinx的配置文件,主索引的数据源

(3)创建增量索引的数据源,以及增量索引文件存储的位置

4. 把Sphinx的服务器停止,并删除原来的索引文件。

(1)创建主索引

(2)查看a表里面是否记录最大的id

5. 启动Sphinx的服务器,进行查询测试。

6. 添加一部新的电影。

7. 创建增量索引。

8. 把创建的增量索引合并到主索引里面。

使用的语法:indexer -c 配置文件 --merge 主索引文件 增量索引文件 --rotate --rotate 强制合并,可以不关闭Sphinx服务的情况下合并。

时间: 2024-08-04 02:02:32

Sphinx全文检索之PHP使用教程的相关文章

Coreseek/sphinx全文检索的了解

Coreseek/sphinx全文检索的了解 概述: 全文检索是一种将文件中所有文本与检索项匹配的文字资料检索方法,全文检索是将存储于数据库中整本书.整篇文章中的任意内容信息查找出来的检索.它可以根据需要获得全文中有关章.节.段.句.词等信息,也可以进行各种统计和分析. 定义: 全文检索易龙天网的设计师认为可以把它划分为二部分: 全文 全文顾名思义:就是全文检索的对象,它可能是一段话,也可能是一片文章,它可能是一个文件比如:word,txt也能是任意一种扩展名结尾的文件 检索 描文章中的每一个词

sphinx全文检索功能 | windows下测试

前一阵子尝试使用了一下Sphinx,一个能够被各种语言(PHP/Python/Ruby/etc)方便调用的全文检索系统.网上的资料大多是在linux环境下的安装使用,当然,作为生产环境很有必要部署在*nix环境下,作为学习测试,还是windows环境比较方便些. 本文旨在提供一种便捷的方式让Sphinx在windows下安装配置以支持中文全文检索,配置部分在linux下通用. 一.关于Sphinx Sphinx 是一个在GPLv2 下发布的一个全文检索引擎,商业授权(例如, 嵌入到其他程序中)需

centos7下搭建sphinx全文检索引擎

Sphinx是一个基于SQL的全文检索引擎,可以结合MySQL,PostgreSQL做全文搜索,它可以提供比数据库本身更专业的搜索功能,使得应用 程序更容易实现专业化的全文检索.Sphinx特别为一些脚本语言设计搜索API接口,如PHP,Python,Perl,Ruby等,同时为MySQL 也设计了一个存储引擎插件. 我要使用Sphinx需要做以下几件事: 1).首先得有数据 2).建立Sphinx配置文件 3).生成索引 4).启动Sphinx 5).php操作使用之(调用api或search

sphinx全文检索 安装配置和使用

公司项目刚刚导入大量产品数据,然后发现网站的产品搜索很卡,原本是原生sql的like来做模糊搜索,数据量20W的时候还可以接受,但是上百万就很卡了,所以需要做优化. 经过考虑,打算采用全文检索 sphinx + 数据库中间件(atlas/mycat) 的架构来优化. 我的环境: centos6.5 64位 lnmp1.3一键环境包 CentOS6.4 X64 安装sphinx及sphinx for php扩展 安装前请先确定安装了常用的组件,然后在官方网站下载最新的sphinx, yum ins

600多G数据库的sphinx全文检索案例

社工库的规模越来越大,MSSQL的查询速度已经不够用了,改用全文检索,目前效果不错,全库在650G左右,索引160G,全文检索响应时间在5秒以内. 主要参考了The Web Of Answers的一个搭建帖子,具体链接找不到了,做了很多修改和改进,便于添加新库. 给出一些配置信息,有兴趣的同学可以留言交流. 索引配置信息: 搭建期间遇到的几个问题: 做索引时报 “out of memory” 错误:很多人认为是内存不够大,超过4G的索引就不行了,真是 too young,不好好看手册,看我怎么解

linux下安装全文检索引擎---sphinx(1)

1. sphinx 全文检索引擎,有分tar.gz包安装和rpm包安装 2. 目前本人用的是rpm包进行安装,经过一番折腾,终于安装成功. 3. 安装rpm 时遇到的问题:如图 解决方式: 下载依赖包. 历时三个步骤下载安装. 前两个需要下载,第三个直接安装 rpm -ivh  MySQL-shared-compat-5.1.47-1.rhel5.x86_64.rpm rpm -ivh perl-DBD-MySQL-3.0007-2.el5.x86_64.rpm yum -y installmy

sphinx + scws + Mysql + PHP全文检索

1 安装之前先安装php,mysql php5.5.29安装:http://blog.csdn.net/clevercode/article/details/52198698. mysql-5.5.27:http://blog.csdn.net/clevercode/article/details/45499231. 2 下载 2.1 本次安装的资源包,配置文件,测试文件 http://download.csdn.net/detail/clevercode/9602949. 2.2 其它下载地址

sphinx 介绍 使用

一 sphinx 简介   在 使用mysql数据库过程中,如果想实现全文检索的优化,可以使用mysql自带全文索引,但是不支持中文..关于sphinx的安装网上很多教程写的都 不错比如:http://www.coreseek.cn/products-install/.这里就不再说明安装方法了.有兴趣的可以自己参考.      MySQL在高并发连接.数据库记录数较多的情况下,SELECT ... WHERE ... LIKE '%...%'的全文搜索方式不仅效率差,而且以通配符%和_开头作查询

Sphinx速成指南

目录 1. Sphinx简介 1.1. 什么是全文检索 1.2. 介绍 1.3. Sphinx的特性 2. Sphinx安装(For MySQL) 2.1. Windows下安装 2.2. Linux下安装 3. 实例说明 4. Sphinx配置 5. 运行Sphinx 6. 搜索(翻译) 6.1. 匹配模式 6.2. 布尔查询语法(Boolean query syntax) 6.3. 扩展查询语法(Extended query syntax) 6.4. 权重(匹配度,Weight) 7. 如何