Sphinx工作原理

2018-01-03 11:03:00
linefo
原创
559

前言


之前到网上看了很多介绍的文章,看的云里雾里。

实在不得已,屁颠的跑去问了主管,才大概了解了其工作的流程。

写这篇介绍还在刚接触阶段,后续会陆续补上更多的讲解。

可能你还要稍微有一点索引的概念。


什么是Sphinx?


基于MySQL等数据源的全文索引程序,作为它们和应用程序的中间层。

它存在的目的,是为了提升从数据库查询的速度,方法是通过建立索引。

我们知道MySQL有主键、唯一 、普通、全文这四种索引,而Sphinx建立的索引和它们没有关系,是自身另行建立的。

主要支持MySQL,PostgreSQL等作为数据源(不同版本默认支持可能不同,原生不支持的数据源需要通过修改源码实现)。

提供了PHP、Python、Perl、Rudy和Java对接的API。


不是说用Sphinx就一定快,它会增加磁盘和内存的消耗,加快的秘诀是通过合理的配置以及在合适的查询环境中使用,通过生成高效的索引,从而缩短从数据库获得数据的时间。


工作原理


Sphinx工作流程图:

Sphinx工作流程图

先感谢上图的作者,它清晰的解释了Sphinx相关的工作流程。

【角色】

Datebase:数据源,可能是MySQL,也可能是XML,合法的数据源即可。

Indexer:Sphinx的索引生成程序。

Searchd:Sphinx的查询工作程序,接受和处理查询命令

App:客户端的工作应用


【工作机制】

Sphinx有两种工作方式,第一种是直接作为数据源(如MySQL)的扩展,第二种是独立出来被API调用,这里讲的工作机制是我接触的第二种方式。

首先数据源要有合法的结构,以及合理的配置。

每次调用Indexer程序时,在相应配置的引导下,从数据源中查找对应数据,并在硬盘生成索引文件。

Searchd程序作为守护进程使用,我们的应用程序通过访问Searchd来使用Sphinx,每次通过API(比如PHP的SphinxClient类中相应函数)查询时,会从索引中(实际使用的索引数据可能会被Sphinx保存到内存)先匹配内容,然后Sphinx可能会返回一个标识(一般是主键)给我们的应用程序,我们应用程序再用这个标识去数据源查找(这个查找操作不是Sphinx完成的,是我们自己通过标识另行操作的)。


【扩展】

(1)可以看出使用时,会先到Sphinx中匹配(而不是数据源),所以,不是完全和数据源同步的!

(2)Sphinx自身只带了简单的中文分词机制,实际使用中会出现很多问题,所以一般我们都使用coreseek去扩展中文的检索。

(3)Sphinx还有很多特性,更多的需要实际开发使用中去了解,关键在于配置文件里面的配置项。

文章分类
联系我们
联系人: Mr.Chen
QQ: 185391277