理论篇
sphinx 可以解决 站内搜索的应用场景(用来生成索引数据,为后续的高效搜索做铺垫)
sphinx 简介
sphinx是一个基于SQL(mysql sqlserver... )的全文检索引擎,它提供了比数据库更加专业的搜索功能,并且sphinx特别为一些脚本语言设计了搜索的API接口吗,比如PHP、Ruby、Python等,同时为MySQL也设计了一个存储引擎插件
它是如何与生成索引的?
连接mysql数据库(sphinx需要安装在服务器中,在sphinx工具的配置文件sphinx.conf中配置相关的信息)
sphinx的应用场景
海量数据中需要对查询做优化的都可以考虑采用sphinx,例如腾讯视频的搜索框所要在短时间内查询到自己想要的数据,这都需要运用类似sphinx这样的工具,以来提升对于用户的体验度。
类似于腾讯视频的搜索模式用sphinx是如何处理的?
本质上的处理方式是 PHP 》 MySQL
运用了sphinx后的处理方式是 MySQL的数据在sphinx中产生索引的数据 》 PHP直接查询访问sphinx即可
为什么要用sphinx?
1. 做搜索时当数据量很大,单纯的MySQL搜索比较慢(如果表进行了分表,那样会更慢)
案例:当遇到MySQL单表的情况下且单表的数据量超过了100W甚至更大,如果用模糊查询like,我们表中的索引基本用不上,在执行搜索的这个动作时,MySQL会将整个表进行一个遍历,速度在N秒+。
2. 搜索时中文分词
背景:比如在腾讯视频中搜索‘刘德华’,它首先会展示出相关于刘德华的视频及相关数据,同时也会将‘马德华'、‘霍华德’、‘刘常德’等。。。 数据查询出来,这就叫中文分词
3. Sphinx 快!
举例说明:高速的建立索引(在当代的CPU中,峰值能达到10M/s)
高性能的搜索(在2~4G的文本数据信息上,平均每次检索的时间小于0.1秒)
可以处理海量的数据(新浪搜狐都在用)
进阶篇
如何获取sphinx?
官网地址:http://sphinxsearch.com/
下载地址 文档介绍 Ubuntu安装 centOS安装 Windows安装具体安装还需看文档
安装完后之后的目录概述(配置文件 + api + 主要的两个工具)
/etc/sphinxsearch ---- 存放sphinx工具的配置文件
/usr/share/sphinxsearch ---- 存放api接口(可以cd后查看支持的的接口)
/usr/bin/indexer ---- 创建索引 import
/usr/bin/searched ---- 后端的进程 import
sphinx如何工作--sphinx配置
详细的配置文件信息,参照官网的文档
Sphinx如何工作--利用indexer工具生成索引数据
命令行生成方式
判断索引数据是否生成成功?
去查看配置文件sphin.conf中 index news_main 下的path(看主索引生成的目录),找到相关的目录(注意日期,后缀 后缀详解如下图)
· * 需要注意的是 在searchd 工具中 预先会将 .spa .spi 取到内存当中。
Sphinx如何工作--searched 工具
searched :后台进程,使用indexer工具生成的数据做查询(处理查询,将相应的数据返回给客户端)
总结:Sphinx是如何工作的
查询Sphinx的数据
1. 通过命令进入(P的端口在Sphinx.conf中配置,:mysql的是常规端口 没有的是API的端口)
mysql -h0 -P9306 # 进入sphinx
select * from 索引数据名 # 模拟查看sphinx的数据,查询出的字段是可以在配置文件中逐个配置的。
流程结构
原生MySQl存储引擎检索流程:
基于Sphinx存储引擎检索:
我还是比较喜欢使用第二种存储引擎,即使你的编程语言不支持Sphinx的API的接口也可以使用。