MySQL SphinxSE 全文检索存储引擎简介

SphinxSE存储引擎用于连接到Sphinx全文检索系统的MySQL存储引擎。使用SphinxSE存储引擎的优点在于可以在MySQL中进行全文检索,检索的结果包含文档ID,权重等,由于是标准的关系数据,还可以进一步参与到更复杂的关系运算中,从而实现部分结构与与非结构化融合检索功能。SphinxSE存储引擎本身是一个非常轻量级的程序,并不提供检索功能,只是负责将检索通过网络发送给Sphinx检索服务器,并将检索结果封装为符合MySQL要求的关系数据。

安装SphinxSE存储引擎后首先需新建一张特殊的指定"ENGINE=SPHINX"检索表,如下:CREATE TABLE ArticleFulltext ( ID INTEGER NOT NULL, Weight INTEGER NOT NULL, Query VARCHAR(3072) NOT NULL, ... INDEX (Query) ) ENGINE=SPHINX CONNECTION="sphinx://localhost:3312/test"; 其中表名和字段名可以是任意名称,但前三个属性的类型必须为INT、INT和VARCHAR。也可以拥有更多的属性,类型必须为INT或TIMESTAMP,名称必须与Sphinx配置文件对应,用于返回检索结果的更多信息。

创建该表后即可使用如下的SQL语句在MySQL中进行全文检索:

SELECT * FROM ArticleFulltext WHERE Query=‘全文检索条件’;

查询返回结果即为全文检索的结果,包括文档ID、权重,若ArticleFulltext表包含了更多属性还包含命中结果的其它信息。

通过SQL联接操作可以很容易的实现融合检索,如:SELECT ID, Title FROM Article, ArticleFulltext WHERE ArticleFulltext.ID = Article.ID and Query = '博客' AND PublishTime > '2007-03-01' AND ReferCount > 0 ORDER BY Weight * 0.5 + ReferCount * 0.5;上述SQL语句即可检索出2007年3月1日以来包含’博客’关键字且并引用过的文章,且按全文检索权重和引用数综合计算所得的权重进行排序。

由此可见,通过将全文检索系统提供的功能以存储引擎的形式嵌入到关系数据库MySQL中可以很方便的提供融合检索功能,虽然功能限制较多,也不失为一种聪明便捷的方式。