Sphinx最佳实践

本文介绍了几种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


转载于:https://my.oschina.net/freegeek/blog/395865

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值