Sphinx全文检索引擎测试
数据表
1、documents
CREATE TABLE `documents` (
`id` int(13) NOT NULL auto_increment,
`group_id` int(11) NOT NULL,
`group_id2` int(11) NOT NULL,
`date_added` datetime NOT NULL,
`title` varchar(255) NOT NULL,
`content` text NOT NULL,
PRIMARY KEY (`id`),
KEY `title` (`title`),
FULLTEXT KEY `content` (`content`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=500006 ;
2、Sphinx
CREATE TABLE `sphinx` (
`id` int(13) NOT NULL,
`weight` int(11) NOT NULL,
`query` varchar(255) NOT NULL,
KEY `Query` (`query`)
) ENGINE=SPHINX DEFAULT CHARSET=utf8;
本次测试,在sphinx.conf中共建立三个索引。
1、dramx 对 documents表的title、content字段均建立索引。
2、dramx_title 对 documents表的title字段建立索引。
3、dramx_content 对 documents表的content字段建立索引。
三个索引在具体测试时,分别被用到。
程序调用Sphinx全文检索引擎有两种方式:
一、Php调用 API
二、安装SphinxSE.
安装方法:
1、 在官网下载mysql-5.0.45-sphinxse-r871-win32.zip解压。
2、 停掉本地mysql所有服务。并将解压后的文件覆盖到mysql相应目录。
3、 启动mysql ,建立一个至少含有三个字段的表(sphinx),字段数据类型依次是int、int、varchar,
Storage Engine选择sphinx即可。
4、 查询时结合表sphinx进行联合查询。
下面先将php+mysql和 Php+ Sphinx 通过like 、order by 、group by进行测试比较。最后单独给出使用第二种方法SphinxSE的查询测试。
测试环境:
内存:1GB 、CPU:intel pentium(R) dual CPU E2140
数据量:50万条
测试项目 |
Php+Mysql |
Php + Sphinx 全文检索引擎 |
||
所花时间(秒) |
代码 |
所花时间 |
代码 |
|
Title like ‘%Fm5%’ |
0.93 |
mysql_query('set names utf8'); $sql = "select title from documents where title like '%Fm5%'"; $start = getmicrotime(); $result = mysql_query($sql) or die(mysql_error()); $end = getmicrotime(); print mysql_num_rows($result).'<br>'; print $end-$start; |
0.012 |
$cl = new SphinxClient (); //设置连接Sphinx主机名与端口 $start = getmicrotime(); $cl->SetServer('localhost',3312); $cl->SetMatchMode(SPH_MATCH_ALL); //搜索模式均采用匹配所有查询词模式 $cl->SetLimits(0,100000); $res = $cl->Query('Fm5', 'dramx_title'); $end = getmicrotime(); print_r($res); print $end-$start; |
Content Like ‘%中国LED照明市场%’ |
11.75 |
mysql_query('set names utf8'); $sql = "select title from documents where content like '%中国LED照明市场%'"; $start = getmicrotime(); $result = mysql_query($sql) or die(mysql_error()); $end = getmicrotime(); print mysql_num_rows($result).'<br>'; print $end-$start; |
0.020 |
$cl = new SphinxClient (); //设置连接Sphinx主机名与端口 $start = getmicrotime(); $cl->SetServer('localhost',3312); $cl->SetMatchMode(SPH_MATCH_ALL); $cl->SetLimits(0,100000); $res = $cl->Query('中国LED照明市场', 'dramx_content'); $end = getmicrotime(); print_r($res); print $end-$start; |
MATCH (content) AGAINST ('无线网卡厂商') |
0.93 |
mysql_query('set names utf8'); $sql = "select title from documents where MATCH (content) AGAINST ('无线网卡厂商')"; $start = getmicrotime(); $result = mysql_query($sql) or die(mysql_error()); $end = getmicrotime(); print mysql_num_rows($result).'<br>'; print $end-$start; |
0.020 |
$cl = new SphinxClient (); //设置连接Sphinx主机名与端口 $start = getmicrotime(); $cl->SetServer('localhost',3312); $cl->SetMatchMode(SPH_MATCH_ALL); $cl->SetLimits(0,100000); $res = $cl->Query('无线网卡厂商', 'dramx_content'); $end = getmicrotime(); print_r($res); print $end-$start; |
MATCH (content) AGAINST ('產業資訊') 并按照 id 排序(Order By id desc) |
1.50 |
mysql_query('set names utf8'); $sql = "select title from documents where MATCH (content) AGAINST ('產業資訊') order by id desc"; $start = getmicrotime(); $result = mysql_query($sql) or die(mysql_error()); $end = getmicrotime(); print mysql_num_rows($result).'<br>'; print $end-$start; |
0.031 |
$cl = new SphinxClient (); //设置连接Sphinx主机名与端口 $start = getmicrotime(); $cl->SetServer('localhost',3312); $cl->SetMatchMode(SPH_MATCH_ALL); $cl->SetSortMode(SPH_SORT_EXTENDED, 'id desc'); $cl->SetLimits(0,100000); $res = $cl->Query('產業資訊', 'dramx'); $end = getmicrotime(); print_r($res); print $end-$start; |
MATCH (content) AGAINST ('专题报道') 并根据group_id分组(Group By group_id ) |
1.01 |
mysql_query('set names utf8'); $sql = "select title from documents where MATCH (content) AGAINST ('专题报道') group by group_id"; $start = getmicrotime(); $result = mysql_query($sql) or die(mysql_error()); $end = getmicrotime(); print mysql_num_rows($result).'<br>'; print $end-$start; |
0.081 |
$cl = new SphinxClient (); //设置连接Sphinx主机名与端口 $start = getmicrotime(); $cl->SetServer('localhost',3312); $cl->SetMatchMode(SPH_MATCH_ALL); $cl->SetGroupBy('group_id', SPH_SORT_ATTR_DESC,"@group desc "); $cl->SetLimits(0,100000); $res = $cl->Query('专题报道台', 'dramx'); $end = getmicrotime(); print_r($res); print $end-$start; |
Content Like ‘%中国LED照明市场%’ order by id desc |
52.54 |
mysql_query('set names utf8'); $sql = "select title from documents where content like '%中国LED照明市场%' order by id desc"; $start = getmicrotime(); $result = mysql_query($sql) or die(mysql_error()); $end = getmicrotime(); print mysql_num_rows($result).'<br>'; print $end-$start; |
0.031 |
$cl = new SphinxClient (); //设置连接Sphinx主机名与端口 $start = getmicrotime(); $cl->SetServer('localhost',3312); $cl->SetMatchMode(SPH_MATCH_ALL); $cl->SetSortMode(SPH_SORT_EXTENDED, 'id desc'); $cl->SetLimits(0,100000); $res = $cl->Query(中国LED照明市场', 'dramx'); $end = getmicrotime(); print_r($res); print $end-$start; |
Content Like ‘%国际Dram报价平台%’ group by group_id desc |
40.05 |
$sql = "select title from documents where content like '%中国LED照明市场%' group by group_id"; $start = getmicrotime(); $result = mysql_query($sql) or die(mysql_error()); $end = getmicrotime(); print mysql_num_rows($result).'<br>'; print $end-$start; |
0.081 |
$cl = new SphinxClient (); //设置连接Sphinx主机名与端口 $start = getmicrotime(); $cl->SetServer('localhost',3312); $cl->SetMatchMode(SPH_MATCH_ALL); $cl->SetGroupBy('group_id', SPH_SORT_ATTR_DESC,"@group desc "); $cl->SetLimits(0,100000); $res = $cl->Query('国际Dram报价平台', 'dramx'); $end = getmicrotime(); print_r($res); print $end-$start; |
针对php+mysql的查询,mysql-nt进程占用CPU的峰值最高到50%, 一般在20%之间,而php+Sphinx由于查询时根本没有用到mysql引擎而是查询自身的索引引擎,所以,在查询上CPU的占用可以忽略。
SphinxSE性能测试
测试项目 |
SphinxSE |
|
所花时间(秒) |
代码 |
|
Title 包含 ‘Dramexchange 国际Dram报价平台’ |
0.045 |
mysql_query('set names utf8'); $sql = "select c.* from documents as c,sphinx as t where c.id=t.id and t.query='@title 国际Dram报价平台;mode=extended'"; $start = getmicrotime(); $result = mysql_query($sql) or die(mysql_error()); $end = getmicrotime(); print mysql_num_rows($result).'<br>'; print $end-$start; |
Content 包含 国际Dram报价平台 |
0.043 |
mysql_query('set names utf8'); $sql = "select c.* from documents as c,sphinx as t where c.id=t.id and t.query='@content 国际Dram报价平台;mode=extended'"; $start = getmicrotime(); $result = mysql_query($sql) or die(mysql_error()); $end = getmicrotime(); print mysql_num_rows($result).'<br>'; print $end-$start; |
Title、Content 包含无线网卡厂商 |
0.016 |
mysql_query('set names utf8'); $sql = "select c.* from documents as c inner join sphinx as t on c.id=t.id where t.query='包含无线网卡厂商'"; $start = getmicrotime(); $result = mysql_query($sql) or die(mysql_error()); $end = getmicrotime(); print mysql_num_rows($result).'<br>'; print $end-$start; |
Title、Content 包含’中国LED照明市场’并按照group_id排序 |
0.052 |
mysql_query('set names utf8'); $sql = "select c.* from documents as c inner join sphinx as t on c.id=t.id where t.query='中国LED照明市场;mode=extended;sort=extended:group_id desc'"; $start = getmicrotime(); $result = mysql_query($sql) or die(mysql_error()); $end = getmicrotime(); print mysql_num_rows($result).'<br>'; print $end-$start; |
Title、Content 包含’中国LED照明市场’并按照group_id 分组 |
0.052 |
mysql_query('set names utf8'); $sql = "select c.* from documents as c inner join sphinx as t on c.id=t.id where t.query='中国LED照明市场;mode=extended;groupby=attr:group_id'"; $start = getmicrotime(); $result = mysql_query($sql) or die(mysql_error()); $end = getmicrotime(); print mysql_num_rows($result).'<br>'; print $end-$start; |
谢谢!
Sphinx全文检索引擎测试的更多相关文章
- sphinx全文检索引擎
今天刚刚学习了一下,就直接分享上去,有些还没有接触,如果有问题请指正,谢谢 sphinx是什么? Sphinx是一个全文检索引擎.主要为其他应用提供高速.低空间占用.高结果 相关度的全文搜索功能. S ...
- centos7下搭建sphinx全文检索引擎
Sphinx是一个基于SQL的全文检索引擎,可以结合MySQL,PostgreSQL做全文搜索,它可以提供比数据库本身更专业的搜索功能,使得应用 程序更容易实现专业化的全文检索.Sphinx特别为一些 ...
- Sphinx全文检索
全文检索 一.生活中的数据总体分为: 结构化数据:指具有固定格式或有限长度的数据,如数据库,元数据等. 非结构化数据:指没有固定格式或不定长的数据,如邮件,word文档等. 非结构化数据还有一种叫法: ...
- sphinx全文检索功能 | windows下测试 (一)
前一阵子尝试使用了一下Sphinx,一个能够被各种语言(PHP/Python/Ruby/etc)方便调用的全文检索系统.网上的资料大多是在linux环境下的安装使用,当然,作为生产环境很有必要部署在* ...
- 全文检索引擎 sphinx-coreseek中文索引
Sphinx是一个基于SQL的全文检索引擎,可以结合MySQL,PostgreSQL做全文搜索,它可以提供比数据库本身更专业的搜索功能,使得应用程序更容易实现专业化的全文检索. Sphinx特别为一些 ...
- Sphinx 全文检索
什么是全文检索: 全文检索是指以文档的全部文本信息作为检索对象的一种信息检索技术.检索的对象有可能是文章的标题,也有可能是文章的作者,也有可能是文章摘要或内容. 简介: Sphinx是由俄罗斯人And ...
- Coreseek/sphinx全文检索的了解
Coreseek/sphinx全文检索的了解 概述: 全文检索是一种将文件里全部文本与检索项匹配的文字资料检索方法,全文检索是将存储于数据库中整本书.整篇文章中的随意内容信息查找出来的检索.它能够依据 ...
- Solr全文检索引擎配置及使用方法
介绍 Solr是一款开源的全文检索引擎,基于lucene.拥有完善的可配置功能界面.具有丰富的查询语言,可扩展,可优化. 下载安装 进入solr官网下载包(这里我使用的版本是8.0) http://w ...
- 全文检索引擎在Django中的使用
Haystack 1.什么是Haystack Haystack是django的开源全文搜索框架(全文检索不同于特定字段的模糊查询,使用全文检索的效率更高 ),该框架支持Solr,Elasticsear ...
随机推荐
- mongodb的分布式集群(2、副本集)
概述 副本集是主从复制的一种,是一种自带故障转移功能的主从复制.攻克了上述主从复制的缺点.实现主server发生问题后.不需人为介入.系统自己主动从新选举一个新的主server的功能. ...
- UIView独占响应事件
exclusiveTouch A Boolean value that indicates whether the receiver handles touch events exclusively. ...
- koa2搭建服务器+使用mongoose链接mangodb
使用node搭建服务器,用到了现在比较流行的框架koa. 1.初始化package.json npm init -y 2.安装koa2 npm i koa --save 3.搭建服务器 const K ...
- Informatica 常用组件Source Qualifier之二 默认查询
2 默认查询 对于关系源,PowerCenter Server 将在运行会话时为每个源限定符转换生成查询.对于每个在映射中使用的源列,默认查询均为 SELECT 语句.也就是说,PowerCenter ...
- Install Python+Django+Nginx+UWSGI
一.软件环境: CentOS6.6_64bit 需要用到的软件: [root@django tools]# ll 总用量 33336 -rw-r--r-- 1 root root 7497785 3月 ...
- 主题 Theme 小结
主题的使用 默认创建的Android工程中,在AndroidManifest.xml文件中有<application android:theme="@style/AppTheme&qu ...
- Jquery chosen动态设置值 select Ajax动态载入数据 设置chosen和获取他们选中的值
在做一个编辑对话框时,要对里面带有select option的操作.主要是想动态载入option和对option的选中.可是由于项目中使用了jquery里的chosen()方法.怎么也无法实现效果 ...
- Android -- Activity的销毁和重建
两种销毁 第一种是正常的销毁,比如用户按下Back按钮或者是activity自己调用了finish()方法: 另一种是由于activity处于stopped状态,并且它长期未被使用,或者前台的acti ...
- 安装 ibm-java-x86_64-sdk-6.0-9.3.x86_64.rpm 的三步骤
yum install libstdc++-devel.x86_64 yum install compat-libstdc++-33.x86_64 rpm -ivh ibm-java-x86_64-s ...
- Units specified don't exist SHSUCDX can't install
重装系统,出现“Units specified don't exist SHSUCDX can't install”怎么办? 昨天,我们领导弄了个联想Thinkpad T510i的笔记本,本来预装的是 ...