Sphinx全文检索引擎测试

数据表

1documents

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 ;

2Sphinx

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中共建立三个索引。

1dramx   documents表的titlecontent字段均建立索引。

2dramx_title  documents表的title字段建立索引。

3dramx_content  documents表的content字段建立索引。

三个索引在具体测试时,分别被用到。

 

 

 

程序调用Sphinx全文检索引擎有两种方式:

一、Php调用 API

二、安装SphinxSE.

安装方法:

1、  在官网下载mysql-5.0.45-sphinxse-r871-win32.zip解压。

2、  停掉本地mysql所有服务。并将解压后的文件覆盖到mysql相应目录。

3、  启动mysql ,建立一个至少含有三个字段的表(sphinx),字段数据类型依次是intintvarchar

Storage Engine选择sphinx即可。

4、  查询时结合表sphinx进行联合查询。

 

下面先将php+mysql Php+ Sphinx 通过like order by group by进行测试比较。最后单独给出使用第二种方法SphinxSE的查询测试。

 

 

测试环境:

内存:1GB  CPUintel 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;

TitleContent 包含无线网卡厂商

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;

TitleContent 包含中国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;

TitleContent 包含中国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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/299901.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

为什么应该用record来定义DTO

DTODTO是数据传输对象&#xff08;Data Transfer Object&#xff09;的简称&#xff0c;主要用作在进程之间传送数据。DTO的特点是它不包含任何业务逻辑或行为。下面是一个典型的DTO定义&#xff1a;public class UserDto {public int Id { get; set; }public string Name { ge…

笑翻了!想象的论文答辩和真实的论文答辩

全世界只有3.14 %的人关注了青少年数学之旅大学答辩实录&#xff0c;要不要这么真实&#xff01;【1】【2】【3】【4】【5】【6】【7】【8】【9】综合来源&#xff1a;冷兔、中外学术情报部分素材源于网络&#xff0c;版权归原作者所有如有侵权请留言联系删除&#xff0c;感谢合…

c++与java,有什么区别?

什么是C 语言&#xff1f; C 是一种计算机编程语言&#xff0c;包含C编程语言的特性以及Simula67&#xff08;第一个面向对象语言&#xff09;。C 引入了Class和Objects的概念。 它封装了高级和低级语言功能。因此&#xff0c;它被视为一种中级语言。之前它被称为“C with cl…

获取页面可见区域,屏幕区域的尺寸

在设计网页时,常常需要考虑页面可见区域的宽度及高度,以便调整页面元素的相对位置. 例如创建2个div,使得高度上各占页面高度的50%,如何实现? 下面是一个页面区域的测试样例,参考即可实现:<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><…

数学特级老师:数学除了做习题,这份140G的资料一定要收藏!

▲ 点击查看很多时候&#xff0c;我们把数学简单的归为算数&#xff0c;归为计算能力&#xff0c;但数学更多的是一种培养逻辑思维能力的方式。包括一元二次方程、或者向量&#xff0c;或者几何证明。而在我们传统的数学课上&#xff0c;更多的是通过做题来理解数学知识&…

工信部的闹剧

用纳税人的钱花4700多万采购一个绿&#xff03;坝软件&#xff0c;开始说必须安装&#xff0c;后来又改了&#xff0c;说可以自行卸载&#xff0c;装不装自己决定。天上掉馅饼了啊&#xff01; 有这么好的事情啊&#xff0c;花一大笔钱搞一个大家爱装不装的东西免费提供给大家用…

浅谈Redis五种数据结构的底层原理

概念 Redis作为一个开源的用C编写的非关系型数据库&#xff0c;基于优秀的CRUD效率&#xff0c;常用于软件系统的缓存&#xff0c;其本身提供了以下五种数据格式&#xff1a; string&#xff1a;字符串list&#xff1a;列表hash&#xff1a;散列表set&#xff1a;无序集合zse…

什么是事件冒泡?如何用jquery/js阻止事件冒泡?阻止冒泡有什么作用?小生来抛个砖。...

2019独角兽企业重金招聘Python工程师标准>>> 前言&#xff1a;有时候&#xff0c;当我们给一个外层 div 添加了一个‘click’事件&#xff0c;然而在内层的其他元素我们也为它添加了 ‘click’事件&#xff0c;那么当我们点击内层的元素时&#xff0c;外层的事件会响…

在家做什么能让隔壁报警?| 今日最佳

全世界只有3.14 %的人关注了青少年数学之旅&#xff08;图源神店通缉令&#xff0c;侵权删&#xff09;

暴库也不怕!EF Core加密存储数据

针对某些数据字段要保存敏感数据的情况&#xff0c;比如银行卡号&#xff0c;我们需要使用一种机制保证存储到数据库的数据是加密的&#xff0c;避免数据泄露风险&#xff0c;但是又能够正常读取出来显示。下面我们用MySql演示如何操作。Demo创建一个ConsoleApp1&#xff0c;然…

[网摘]CSS z-index 属性

定位一直是WEB标准应用中的难点&#xff0c;如果理不清楚定位那么可能应实现的效果实现不了&#xff0c;实现了的效果可能会走样。如果理清了定位的原理&#xff0c;那定位会让网页实现的更加完美。 定位的定义&#xff1a; 在CSS中关于定位的内容是&#xff1a;position:relat…

JVM知识点总览:高级Java工程师面试必备

下面这篇文章汇集了阿里、美团、Oracle 等大厂的 JVM 考点&#xff0c;你是否能回答得上来&#xff1f; 什么是 Java 虚拟机&#xff1f;为什么 Java 被称作是“平台无关的编程语言”&#xff1f; Java 代码是怎么运行的&#xff1f; Java 虚拟机是如何加载 Java 类的? JVM…

2007最受欢迎的十大Ajax技术文章

DeveloperWorks 中国网站 Ajax 技术资源中心在 2007 年上半年里发表了很多和 Ajax 相关的技术文章、教程、多媒体课堂和专栏。我们特地整理出 2007 上半年最受读者欢迎的内容&#xff0c;希望通过这个排行榜&#xff0c;您可以了解最新的 Ajax 技术热点&#xff0c;及与 Ajax 开…

设计原则:色彩

背景 最初接触《彩色UML》的时候就给了我很大的触动&#xff0c;可惜一致没有内化这种触动&#xff0c;直到最近一次看“老大”画了一个彩色的分析图&#xff0c;又突然的重现了这种触动&#xff0c;然后在一个梦里内化了这种冲动&#xff0c;第二天发现团队的“贴纸”和“水笔…

中国移动云能力中心 Iaas 产品部软件开发工程师陈焱山:社区始于连接,也成就于连接...

社区始于连接&#xff0c;也成就于连接——陈焱山ApacheCon 是 Apache 软件基金会&#xff08;ASF&#xff09;的官方全球系列大会。作为久负盛名的开源盛宴&#xff0c;ApacheCon 在开源界备受关注&#xff0c;也是开源运动早期的知名活动之一。早在 1998 年&#xff0c;在 AS…

ZGY的Excel特征提取器初期版本完成

其实这个初期版本已经基本上把他要的功能都实现了&#xff0c;呵呵 他的要求是批量转Excel&#xff0c;把所有用黄色标出的单元格所在的列拷到一个新文件中 其实底层很简单&#xff0c;界面做了倒有一会&#xff0c;还是一如既往的喜欢SWT啊~ 附上Java利用Apache POI进行Excel文…

阿里大佬推荐初学者练习的 Java 开源项目

对于JAVA的新手来说&#xff0c;需要结合着相关书籍的学习和开源项目一起&#xff0c;才能达到比较好的效果。 在此推荐一些轻量级适合入门的JAVA开源项目&#xff0c;希望对题主的学习有所帮助。 项目名称&#xff1a;springboot-learning-example项目简介&#xff1a;sprin…

真·抬头发票!| 今日最佳

全世界只有3.14 %的人关注了青少年数学之旅&#xff08;图源迷惑行为大赏&#xff0c;侵权删&#xff09;

老歌新唱--使用VB6开发的ActiveX实现.NET程序的混淆加密

代码下载地址&#xff1a;http://files.cnblogs.com/wuhuacong/VBActiveX.rar 由于存在一下几种特点&#xff1a;1、.NET程序反编译容易&#xff0c;而使用一些混淆工具会导致有些程序不能运行2、VB6开发ActiveX控件&#xff0c;那叫一个快&#xff0c;VB代码也不是很容易被反编…

对C# 程序员来说现在是到目前为止最好的时代

本文的标题来自Scott Hanselman 的 Xamarin Evolve 2013 Talk Video - How C# Saved My Marriage&#xff0c;想写下这些东西主要是今天看到了CSDN的一个极客头条《观点&#xff1a;.NET向何处去&#xff1f;》和传智播客.Net学院&#xff1a;《LinuxMono公开课》的视频看了2个…