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 ...
随机推荐
- 典型案例收集-OpenVPN不同网段的访问控制(转)
一.案例1 针对不同的客户端指定不同的等级和权限. 通常的方法是: 1.每个客户端分配不同的IP地址: 2.利用防火墙对不同的IP地址进行控制: 例如: 1.公司内部网段是10.66.4.0/24: ...
- HelloWorld 和相关设置
写这篇文章的初衷很简单,就是想再一次证明 IntelliJ IDEA 对于 Java 开发人员来说,确实比 eclipse 要好用得多,鉴于目前市面上关于 IntelliJ IDEA 的教程比较少,叙 ...
- CentOS6.5使用yum命令方便快捷安装Nginx与卸载
原文:https://my.oschina.net/ramboo/blog/223408 当然,首先要求是可以联网的CentOS系统,因为yum安装需要互联网连接. 卸载命令:yum remove n ...
- Appium+python自动化16-appium1.6在mac上环境搭建启动ios模拟器上Safari浏览器
前言 在mac上搭建appium踩了不少坑,先是版本低了,启动后无限重启模拟器.后来全部升级最新版本,就稳稳的了. 环境准备: 1.OS版本号10.12 2.xcode版本号8.3.2 3.appiu ...
- u3d移动游戏优化规范
1.顶点性能一般来说,如果您想在iPhone 3GS或更新的设备上每帧渲染不超过40,000可见点,那么对于一些配备 MBX GPU的旧设备(比如,原始的 iPhone,如 iPhone 3g和 iP ...
- 能力成熟度模型CMM
能力成熟度模型(Capability Maturity Model,英文缩写为CMM)[1]是 一种开发模型.Carnegie Mellon大学的研究人员从美国国防部合同承包方那里收集数据并加以研究, ...
- Matplotlib Tutorial(译)
Matplotlib Tutorial(译) 翻译自:Matplotlib tutorialNicolas P. Rougier - Euroscipy 2012 toc{: toc} 这个教程基于可 ...
- Hadoop Combiners
In the last post and in the preceding one we saw how to write a MapReduce program for finding the to ...
- poj2142 The Balance 扩展欧几里德的应用 稍微还是有点难度的
题目意思一开始没理解,原来是 给你重为a,b,的砝码 求测出 重量为d的砝码,a,b砝码可以无限量使用 开始时我列出来三个方程 : a*x+b*y=d; a*x-b*y=d; b*y-ax=d; 傻眼 ...
- 数值格式化 NumberFormat DecimalFormat RoundingMode
NumberFormat [简介] java.text.NumberFormat extends java.text.Format extends java.lang.Object 实现的接口:Ser ...