SPHINX学习笔记!

一:什么是sphinx
sphinx是一个基于SQL的全文检索引擎,可以结合mysql,postgreSQL做全文搜索,它可以提供比数据库本身更专业的搜索功能。使得应用程序更容易实现专业化的全文检索。sphinx特别为一些脚本语言设计搜索API接口,如php,python,perl,ruby等。同时为mysql也专业设计了一个存储引擎插件。(扩展:还有Lucence)

二:什么时候使用?
在MYSQL中当对一个文本类型的字段进行LIKE 并以%开头的查询时,会进行全表扫描。
比如 我们商品中有商品500万件。如果我们要搜索商品名称中带红色的,如果不且SPHINX肯定是这样写:
原因一、全表扫描慢:
SELECT * FROM php34_goods WHERE goods_name LIKE ‘%红色%’;
这条SQL会进行全表扫描,所以性能非常慢,查询速度非常慢。
原因二、MYSQL没有中文分词,而一般对短语搜索时必须分词才能搜索
sphinx就可以解决以上两个问题:
总结:当一个功能需要对表中text,varchar等文本类型的字段进行LIKE 查询时,如(根据歌词搜索歌曲这个功能)MYSQL是全表扫描非常慢,需要使用SPHINX:

SPHINX学习笔记!_第1张图片
1.png

我们商城中的根据关键字搜索的功能需要使用SPHINX优化。1.解决性能问题 2.解决中文分词的问题

三、怎么用
sphinx有两种使用方式:
用法一原始用法:SPHINX和mysql是两个独立的服务器

SPHINX学习笔记!_第2张图片
2.png

流程:

  1. PHP要先把要搜索的短语发给SPHINX服务器,SPHINX返回的是记录的ID
  2. PHP 再使用sphinx返回的ID查询数据库
    用法一、:shpinxse:把SPHINX集成到MYSQL里去(没有单独的shpinx服务器)
SPHINX学习笔记!_第3张图片
3.png

PHP只需要写一个SQL语句即可,不用很管SPHINX,MYSQL会自己连接查询sphinx。如果要使用这种 需要在LINUX下重新编译MYSQL,把SPHINX当成插件编译到MYSQL中去。

实际操作:

  1. 先下载sphinx的包, coreseek可以理解成加了中文语言包的sphinx(sphinx默认支持俄语和英语,不支持中文)

  2. 下载包之后几个重要文件说明:

SPHINX学习笔记!_第4张图片
4.png
SPHINX学习笔记!_第5张图片
5.png
SPHINX学习笔记!_第6张图片
6.png
  1. 实际应用:先复制MYSQL的配置文件模板到根目录下并改名为sphinx.conf
  2. 配置文件配置好之后就可以使用这个文件生成索引了:
SPHINX学习笔记!_第7张图片
11.png
  1. 安装sphinx服务器
SPHINX学习笔记!_第8张图片
12.png
  1. 打开服务窗口启用sphinx:
13.png
SPHINX学习笔记!_第9张图片
14.png
  1. 写PHP代码操作SPHINX
    A. 先复制coreseek包中的sphinxapi.php文件到项目中:
SPHINX学习笔记!_第10张图片
22.png

B 写PHP代码:

SPHINX学习笔记!_第11张图片
23.png

sphinx自动更新
在使用SPHINX生成索引时只会为当前数据库中的数据生成索引,生成索引之后如果在数据库中又添加了新的数据那么在SPHINX是无法搜索到新的数据的,需要把新的数据也生成索引并添加到SPHINX中去才行。
如果每次插入新的数据之后都要手动再重建索引太麻烦了,所以我们一般要配置SPHINX每隔一段时间自动把数据库中最新插入的数据重新新的索引文件,并把这个新的索引文件合并到主索引文件上。

实际操作:

  1. 每次生成索引文件之后,要把最后一条记录的ID保存下来,下次ID大于这个ID就是新的数据
    a. 建一张表用来保存这个ID
SPHINX学习笔记!_第12张图片
31.png

b. 配置SPHINX让每次生成索引之后能够直接 把最大的ID更新进来

SPHINX学习笔记!_第13张图片
b.png
  1. 定期为新添加的数据生成索引
    a. 修改sphinx定义一个新的数据源(新插入的还没有创建索引的数据)


    SPHINX学习笔记!_第14张图片
    c.png

    b. 再添加一个index索引(每个数据源对应一个index)

SPHINX学习笔记!_第15张图片
d.png

c. 写一个bat脚本,让这个定期用新的数据源生成索引文件,并把这个索引文件合并到主索引(第一次生成的索引文件)文件上。

SPHINX学习笔记!_第16张图片
e.png

d. 配置windows系统让系统定期执行这个bat.脚本即可:

SPHINX学习笔记!_第17张图片
f.png

你可能感兴趣的:(SPHINX学习笔记!)