文档章节

Sphinx最佳实践

Nob
 Nob
发布于 2015/04/03 17:54
字数 1052
阅读 963
收藏 47

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


© 著作权归作者所有

共有 人打赏支持
上一篇: docker环境搭建
下一篇: HMM学习
Nob

Nob

粉丝 18
博文 86
码字总数 58473
作品 0
东城
个人站长
私信 提问
加载中

评论(2)

Nob
Nob

引用来自“itfanr”的评论

不是排版引擎吗?
python生成文档的也叫sphinx
itfanr
itfanr
不是排版引擎吗?
使用sphinx快速生成Python API 文档

不管是开源还是闭源,文档都是很重要的。当然理论上说,最好的文档就是代码本身,但是要让所有人都能读懂你的代码这太难了。所以我们要写文档。大部分情况,我们不希望维护一份代码再加上一份...

naughty
2015/03/06
0
2
小蚂蚁学习sphinx(1)--理论篇

网上有视频在讲php+mysql+sphinx,以前只是听说过,心想今天终于能够学习一下涨涨见识了,一个小时的理论篇讲完,并没有预想中那种汲取大量知识的满足感,一来讲的理论多一些,二来都是在lin...

嗜学如命的小蚂蚁
2015/09/21
62
0
sphinx是支持结果聚类的

Coreseek 4.1 参考手册 / Sphinx 2.0.1-beta Sphinx--强大的开源全文检索引擎,Coreseek--免费开源的中文全文检索引擎 版权 © 2001-2011 Andrew Aksyonoff 版权 © 2008-2011 Sphinx Techn...

桃子红了呐
2017/11/16
0
0
coreseek(sphinx中文版) 安装配置+sphinx存储引擎for mysql

关于coreseek介绍 http://www.coreseek.cn/products-install/installonbsd_linux/ mmseg 安装(中文分词) # wget http://www.coreseek.cn/uploads/csft/3.2/coreseek-3.2.14.tar.gz cd mmseg-......

cqfish
2012/11/20
0
0
sphinx增量索引方案

以sphinx.conf中默认的数据为例: 1.先在mysql中插入一个计数表和两个索引表 CREATE TABLE sph_counter( counter_id INTEGER PRIMARY KEY NOT NULL, maxdocid INTEGER NOT NULL ); //主索引使......

旋转木马-千里马
2016/01/06
58
0

没有更多内容

加载失败,请刷新页面

加载更多

网友第一次开发EOS区块链的经验

在处理项目时,用Java Connector for EOS区块链编写: 创建钱包 创建帐户 创建交易 创建签名交易 在帐户之间转移代币 我遇到了各种和运行本地EOS节点需要遵循的基本步骤。这个小指南纯粹是为...

geek12345
7分钟前
1
0
mybatis insert 动态生成插入的列及插入的值

代码如下 : 1.mapper.xml 文件 <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"......

qimh
16分钟前
1
0
junit启动报错 Unable to find a @SpringBootConfiguration

环境 springboot项目 工程结构: test类编写: 异常 Unable to find a @SpringBootConfiguration, you need to use @ContextConfiguration or @SpringBootTest(classes=...) with your test ......

zzx10
17分钟前
1
0
Html5 学习

1、mui 框架中的 plusReady 真机运行,浏览器不执行 http://ask.dcloud.net.cn/question/31708。 2、参考网络请求 仿网页 https://www.jianshu.com/u/84b5ef6309d6...

QGlaunch
18分钟前
1
0
net.sf.ezmorph.bean.MorphDynaBean cannot be cast to com.console.demo.web.model.XXX

前景: net.sf.ezmorph.bean.MorphDynaBean cannot be cast to com.console.demo.web.model.XXX //jsonObject:所有参数//FreightTemplate对象里面包含一个 private List<FreightTemplateCi......

事儿爹
18分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部