本文介绍了几种Sphinx搜索引擎使用方式,几种方式各有特点,分别适用于不同场景,这里主要介绍SphinxSE的使用方式。
本文只是列举了Sphinx几种使用方式,对于基本的sphinx使用可以先看看这个,http://my.oschina.net/freegeek/blog/302431
Sphinx一般有多种种连接方式,一种是SphinxAPI,再就是SphinxQL,当然还有SphinxSE
SphinxAPI:
一系列searchd 的客户端API 库,用于流行的Web脚本开发语言(PHP, Python, Perl, Ruby, Java),使用简单,不多言
SphinxQL:
Sphinx的searchd守护程序从 版本0.9.9-rc2开始支持MySQL二进制网络协议,并且能够通过标准的MySQL API访问。例如,“mysql”命令行程序可以很好地工作。以下是用MySQL客户端对Sphinx进行查询的例子:
$ mysql -P 9306 Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 1 Server version: 0.9.9-dev (r1734) Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> SELECT * FROM test1 WHERE MATCH('test') -> ORDER BY group_id ASC OPTION ranker=bm25; +------+--------+----------+------------+ | id | weight | group_id | date_added | +------+--------+----------+------------+ | 4 | 1442 | 2 | 1231721236 | | 2 | 2421 | 123 | 1231721236 | | 1 | 2421 | 456 | 1231721236 | +------+--------+----------+------------+ 3 rows in set (0.00 sec)
请注意mysqld甚至根本没有在测试机上运行。所有事情都是searchd自己搞定的。
新的访问方法是对原生API的一种补充,原生API仍然完美可用。事实上,两种访问方法可以同时使用。另外,原生API仍旧是默认的访问方法。MySQL协议支持需要经过额外的配置才能启用。当然这只需要更动一行配置文件,加入一个协议为mysql41的监听器(listener)就可以了:
listen = localhost:9306:mysql41
如果仅仅支持这个协议但不支持SQL语法,那没什么实际意义。因此Sphinx现在还支持SQL的一个很小的子集,我们给这个子集起个绰号,叫SphinxQL。
SphinxSE:
SphinxSE是一个可以编译进MySQL 5.x版本的MySQL存储引擎,它利用了该版本MySQL的插件式体系结构。SphinxSE不能用于MySQL 4.x系列,它需要MySQL 5.0.22或更高版本;或MySQL 5.1.12或更高版本。
尽管被称作“存储引擎”,SphinxSE自身其实并不存储任何数据。它其实是一个允许MySQL服务器与searchd交互并获取搜索结果的嵌入式客户端。所有的索引和搜索都发生在MySQL之外。
显然,SphinxSE的适用于:
使将MySQL FTS 应用程序移植到Sphinx;
使没有Sphinx API的那些语言也可以使用Sphinx;
当需要在MySQL端对Sphinx结果集做额外处理(例如对原始文档表做JOIN,MySQL端的额外过滤等等)时提供优化。
下面是一个基本使用方式:
1.安装,参见引文文献 2. 以root用户登录MySQL,执行:show engines,返回结果中,有SPHINX即表示已经启用了SphinxSE支持。 3. 按照MySQL数据源说明,导入documents.sql,并做好csft_mysql.conf的配置,然后测试搜索是否正常; 在Win32或者BSD/Linux测试包中,均包含了csft_mysql.conf的演示配置(前往查看说明),你可以直接使用测试。 最后,启动searchd,准备接受查询! 4. 建立SphinxSE查询数据表,在documents.sql导入的数据库建立:前往查看详细建表语法 CREATE TABLE documents_sphinxse ( id INTEGER UNSIGNED NOT NULL, weight INTEGER NOT NULL, query VARCHAR(3072) NOT NULL, group_id INTEGER, INDEX(query) ) ENGINE=SPHINX CONNECTION="sphinx://localhost:9312/mysql"; 5. 执行SphinxSE查询:前往查看详细查询语法 SELECT * FROM documents_sphinxse WHERE query='网络搜索;mode=any'; 6. 执行关联SphinxSE查询,获取原始数据信息: SELECT dse.*, d.title FROM documents_sphinxse AS dse LEFT JOIN documents AS d USING(id) WHERE query='网络搜索;mode=any';
这里低4步建表最后一行暗藏玄机
ENGINE=SPHINX CONNECTION="sphinx://localhost:9312/mysql";
更加详细使用方式参见参考文献。
[参考文献]
SphinxSE基本使用 http://www.coreseek.cn/products-install/sphinxse/
MySQL 存储引擎 (SphinxSE) http://www.coreseek.cn/docs/coreseek_3.2-sphinx_0.9.9.html#sphinxse
sphinx api和SphinxQL对比 http://www.itokit.com/2011/1010/72294.html