数据表

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;

谢谢!

转载于:https://www.cnblogs.com/zl0372/p/sphinx_13.html

Sphinx全文检索引擎测试相关推荐

  1. Linux 搭建Sphinx 全文检索引擎

    首先下载mysql和sphinx源码包 解压sphinx: > tar zxvf sphinx-2.0.6-release.tar.gz 解压Mysql > tar zxvf mysql- ...

  2. 在Ubuntu8.10下为PHP安装coreseek全文检索引擎支持的详细步骤

    2019独角兽企业重金招聘Python工程师标准>>> 关于sphinx就不多累言了,一套相当优秀的全文检索引擎.无论索引速度还是检索速度真的是非常的快. 至于coreseek ,可 ...

  3. elasticsearch(es)分布式全文检索引擎 简介

    0. 带着问题上路-ES是如何产生的? (1)思考:大规模数据如何检索? 如:当系统数据量上了10亿.100亿条的时候,我们在做系统架构的时候通常会从以下角度去考虑问题: 1)用什么数据库好?(MyS ...

  4. lucene 全文检索引擎的架构

    Lucene是apache软件基金会4 jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,但它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引 ...

  5. IndexTank全文检索引擎设计分析

    2019独角兽企业重金招聘Python工程师标准>>> 简介 IndexTank是一个托管的搜索基础服务.他主要有以下几个特点(从官网介绍翻译过来的): 索引更新实时生效 地理位置搜 ...

  6. sphinx全文检索之PHP使用教程

    sphinx全文检索之PHP使用教程 http://www.php100.com/html/php/lei/2013/0916/6188.html 以上一篇的email数据表为例: 数据结构: vie ...

  7. 讯搜全文检索引擎-服务器部署

    ==============[讯搜全文检索引擎-部署服务器]=============== 1.存放在 xxx.xxxxxx.com 项目下的 search 模块,访问域名为:search.xxxxx ...

  8. Lucene开源全文检索引擎快速入门

    Lucene是一个用Java开发的开源全文检索引擎,官网是:http://lucene.apache.org/ ,Lucene不是一个完整的全文索引应用(与之对应的是solr),而是是一个用Java写 ...

  9. [摘]全文检索引擎Solr系列—–全文检索基本原理

    原文链接--http://www.importnew.com/12707.html 全文检索引擎Solr系列-–全文检索基本原理 2014/08/18 | 分类: 基础技术, 教程 | 2 条评论 | ...

最新文章

  1. MyBatis入门示例
  2. oracle rac 图形化界面,oracle 10g rac配置vipca进不了图形界面,请高手帮忙分析下
  3. launch mode 应用场景
  4. OpenCASCADE:Foundation Classes数据类型
  5. 《XNA游戏开发》简介
  6. web.xml的contextConfigLocation作用及自动加载applicationContext.xml
  7. Atitit 常见触发器功能总结 目录 1.1. mysql触发器实例 插入数据前更改数据值.mhtml 1 1.2. 数据修改后更改数据值 1 1.3. 不能为空检测约束。。 1 2. Ref 2
  8. 数电-汽车尾灯控制电路设计
  9. 多元统计分析R语言建模| 1 多元数据的数学表达
  10. 美丽世界的另一面!(请保护好你身边的亲朋好友)
  11. EfficientDet:目标识别领域的 EfficientNet
  12. 深度学习目前的局限性之AI识别彻底懵逼!这到底是「牛」还是「鲨」?
  13. 使用 Mypy 检查 30 万行 Python 代码,总结出 3 大痛点与 6 个技巧!
  14. 简单的学生成绩管理系统
  15. 全球都在研发的虚拟气候设备,是治愈“失眠”的最优解吗?
  16. 如何高效进行大规模分类?
  17. 关于service层,dao层,controller层
  18. 太原网络营销师揭秘每个老板最头疼的百度竞价(SEM)如何提供转化率?
  19. 永大电梯服务器显示连接断开,提供上海永大电梯服务器
  20. 博客搬家至 utensil.github.io

热门文章

  1. 记一次kafka数据丢失问题的排查
  2. ubuntu下配置jdk(离线压缩包方式)
  3. 话里话外:浅谈国企绩效考核问题(二)
  4. linux汇编中的注释,Linux 汇编器:对照 GAS 和 NASM
  5. 洛谷P1019 单词接龙
  6. nginx限流健康检查
  7. oracle sys可以登录,system权限不足,解决方法
  8. Shell脚本之sed的使用
  9. MaintainableCSS 《可维护性 CSS》 --- 模板篇
  10. sql-逻辑循环while if