sphinx原理以及索引流程
来源:互联网 发布:android卡牌游戏源码 编辑:程序博客网 时间:2024/06/11 02:39
在使用mysql数据库过程中,如果想实现全文检索的优化,可以使用mysql自带全文索引,但是不支持中文。。关于sphinx的安装网上很多教程写的都不错比如:http://www.coreseek.cn/products-install/。这里就不再说明安装方法了。有兴趣的可以自己参考。
MySQL在高并发连接、数据库记录数较多的情况下,SELECT ... WHERE ... LIKE '%...%'的
全文搜索方式不仅效率差,而且以通配符%和_开头作查询时,使用不到索引,需要全表扫描,对数
据库的压力也很大。MySQL针对这一问题提供了一种全文索引解决方案,这不仅仅提高了性能和效
率(因为MySQL对这些字段做了索引来优化搜索),而且实现了更高质量的搜索。但是,至今为
止,MySQL对中文全文索引无法正确支持。
可以使用Sphinx(一种全文检索引擎)技术,Sphinx默认不支持中文索引及检索。以前用Coreseek的补丁来解决,目前Coreseek 不单独提供补丁文件,而基于sphinx开发了Coreseek 全文检索服务器,Coreseek应该是现在用的最多的sphinx中文全文检索,它提供了为Sphinx设计的中文分词包LibMMSeg包含mmseg中文分词。
Sphinx的基本原理与检索流程
这种检索流程使用sphinx官方为我们提供的API文件(php使用sphinxapi.php),首先php通过这个api连接sphinx服务器,获取查询结果的id信息,然后再通过这些id从mysql数据库中 取得相关的数据。
SphinxSE -- 基于Sphinx存储引擎检索
这种检索流程,把sphinx编译成mysql的存储引擎,SphinxSE是一个可以编译进MySQL 5.x版本的MySQL存储引擎,它利用了该版本MySQL的插件式体系结构。尽管被称作“存储引擎”,SphinxSE自身其实并不存储任何数据。它其实是一个允许MySQL服务器与searchd交互并获取搜索结果的嵌入式客户端。所有的索引和搜索都发生在MySQL之外。
SphinxSE的使用:
当需要在MySQL端对Sphinx结果集做额外处理(例如对原始文档表做JOIN,MySQL端的额外过滤等等)时提供优化。
要通过SphinxSE搜索,需要建立特殊的ENGINE=SPHINX的“搜索表”,然后使用SELECT语句从中检索,把全文查询放在WHERE子句中。
创建一张表t1
CREATE TABLE t1
(
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/test1";
搜索表前三列的类型必须是INTEGER,INTEGER和VARCHAR,这三列分别对应文档ID,匹配权值和搜索查询。查询列必须被索引,其他列必须无索引。列的名字会被忽略,所以可以任意命名,参数CONNECTION来指定用这个表搜索时的默认搜索主机、端口号和索引,语法格式:CONNECTION="sphinx://HOST:PORT/INDEXNAME"。
执行SQL语句 select d.id,d.title,d.content from t1 join documents as d on t1.id = d.id and t1.query = '研究生创业';
+----+--------------------+-----------------------+
| id | title | content |
+----+--------------------+-----------------------+
| 5 | 研究生的故事 | 研究生自主创业 |
+----+--------------------+-----------------------+
1 row in set (0.04 sec)
结果返回了我们想要的数据,可见利用SphinxSE可以仅仅在SQL语句上做很小的改动即可很方便的实现全文检索!
主索引 + 增量索引
前提:数据不会被改变
第一步:建表: (用来存索引过的最大的记录 id)
Create table a(
Id int unsigned not null primary key,
Max_id int unsigned,
);
第二步:修改配置文件为:见 sphinx配置文件
第三步:先执行 ./bin/indexer –c ./etc/sphinx.conf –test1
生成所有的索引-〉一个数据源的主查询,只有第一次执行
第四步:定期执行:
./bin/indexer –c ./etc/sphinx.conf delta --rotate
生成增量的索引文件
第五步:合并到主索引中
./bin/indexer –merge test1 delta –c ./etc/sphinx.conf --rotate
- sphinx原理以及索引流程
- sphinx索引原理
- sphinx索引原理
- 全文检索之sphinx源码分析--索引创建流程
- Sphinx API类型以及SphinxSE实现原理分析
- 文本索引引擎sphinx
- Sphinx增量索引(转)
- sphinx索引生成
- sphinx 增量索引更新
- sphinx 增量索引更新
- Sphinx实时索引
- sphinx全文索引教程
- sphinx全文索引教程 .
- sphinx建立索引
- sphinx 实现实时索引
- sphinx增量索引
- Sphinx建立增量索引
- Sphinx实时索引
- 网络视频监控系统开发系列-----BMP文件头格式
- 第9周项目1-深复制体验(1)
- 如何从按行读文件&&以及每行中有多少个数据块,并输出每个数据块 (2)
- 有两种情况,会出现打开的文件都显示^M符号:
- JAVA设计模式(05):创建型-原型模式(Prototype)
- sphinx原理以及索引流程
- Oracle10g下载地址--多平台下的32位和64位
- 多个条件判断二进制的简化
- spring mvc json date字符串格式化的问题
- CSS选择器
- Android onActivityResult获取返回值的用法
- MyEclipse8.5建立SpringMVC入门项目
- 自定义View之绘图篇(五):圆形水波
- HDU 1754 线段树