




已阅读5页,还剩37页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
网站优化第四天目录一、sphinx简介11、为什么要用sphinx12、sphinx介绍?13、使用原理1二、安装shpinx软件21、下载软件,进行解压22、把解压后的软件拷贝到指定位置,(便于管理要和其他的环境软件在同级目录里面)2三、具体的配置使用31、修改sphinx配置文件,创建数据源与索引位置3(1)配置数据源:4(2)配置数据源生成的索引文件存放的位置。5(3)配置sphinx服务器的一些配置52、对查询的数据创建索引53、启动sphinx的服务器,开始查询64、sphinx的查询应用85、对查询到关键词进行标注显示,10四、sphinx的匹配模式111、SPH_MATCH_ALL 完全匹配所有的词112、SPH_MATCH_ANY: 匹配任意一个词123、SPH_MATCH_PHRASE: 必须匹配整个短语,不能分割。134、SPH_MATCH_EXTENDED: 支持一些扩展的语法145、SPH_MATCH_BOOLEAN 与,或,非,分组 &,or,!,()14五、增量索引15六、网页静态化介绍191、概述:192、几个重要的概念203、真静态实现方式204、OB基本介绍20(1)程序缓存(默认开启,不能关闭)20(2)ob缓存(默认开启,可以关闭)205、ob 缓存对应的函数。216、真静态典型案例。237、真静态典型案例扩展248、真静态优缺点说明:24七、伪静态251、实现方式252、如何开启253、具体配置:26(1)RewriteEngine on26(2)RewriteCond 重写条件,26(3)RewriteRule :定义重写规则274、入门案例295、新闻案例,配置成伪静态306、使用rewrite机制完成防盗链。31(1)什么是盗链,31(2)如何防止被盗链:31一、sphinx简介1、为什么要用sphinx在mysql数据库中,对于如下sql语句,select * from xxx where xxx like %xxx(以%开头的like查询),无法使用到任何索引优化,导致如果数据量非常大,查询速度会非常慢。而这种sql语句在很多功能中都要用到,如根据歌词查询歌曲,根据剧情查询电影等。如果要加快查询只能使用第三方软件,sphinx和lucence。mysql中也提供了全文索引的功能,但是有两个问题:(1)只有myisam引擎支持(2)对中文支持不好。不过现在最新的mysql5.6版本中的innodb1.2的版本也同样支持全文索引。2、sphinx介绍?中文名:全文索引引擎。只支持英文和俄文。但是只要有相应的语言包也可支持任何语言。国内有一团队在sphinx基础上封装了一个带中文包的软件:coreseek。3、使用原理(1)先创建数据源(一张表的select查询结果),(2)根据数据源创建索引,使用分词技术。(3)php把查询的关键词给sphinx服务器,sphinx根据关键词查找到关键字在mysql表里面的记录的id.sphinx把id返回给php查询端(4)php根据返回的id,查询mysql服务器,原理图:根据数据源创建索引,php把关键词给sphinx的服务器,sphinx服务器返回关键词在mysql表里面的id,php根据id再查询mysql数据库,最终返回想要的数据。二、安装shpinx软件1、下载软件,进行解压2、把解压后的软件拷贝到指定位置,(便于管理要和其他的环境软件在同级目录里面)三、具体的配置使用创建数据源(一张表的数据,或sql语句的执行结果)1、修改sphinx配置文件,创建数据源与索引位置 复制etc/目录下的 csft_mysql.conf 一份到上一级目录,并改名为:shpinx.conf (1)配置数据源:打开sphinx.conf 的配置文件 语法:source 数据源的名称/具体的配置要注意:一个配置文件中,可以配置多个数据源,通过数据源的名称来区分。sql_query_pre = SET NAMES utf8#主查询,其中第一个字段必须是id,并且类型为非负,非空,唯一的整数。select id,title,description from movie(2)配置数据源生成的索引文件存放的位置。 语法:index 索引的名称 (必须与一个数据源相对应) 就是一个数据源对应一个索引文件的配置,语法 index 索引的名称 /具体的配置charset_dictpath = d:/wamp/sphinx/etc/charset_type=zh_cn.utf-8(3)配置sphinx服务器的一些配置2、对查询的数据创建索引执行sphinx下的一个程序indexer.exe c配置文件 -all | 索引的名字 注意:-all:为配置文件中所有的索引创建索引文件。也可以使用索引的名字只为某一个索引创建索引文件 (1)以管理员的方式打开cmd窗口,进入到sphinx 的安装目录里面的bin目录,执行indexer.exe命令语法:indexer.exe c配置文件 -all | 索引的名字indexer c e:/wamp/sphinx/sphinx.conf movie(2)查看创建的索引文件注意:若出现错误: 原因:配置文件的编码是utf-8+的,改成:utf-8即可。3、启动sphinx的服务器,开始查询(1)把sphinx安装成window的一个服务。以管理员的方式进入cmd,进入到sphinx安装文件里面的bin目录,执行可以通过searchd -help查看帮助安装的语法:searchd -c sphinx的配置文件 -installsearchd -c e:/wamp/sphinx/sphinx.conf -install(2)启动sphinx的服务。net start searchd查看是否启动成功。4、sphinx的查询应用(1)需要复制一个接口文件到项目中来。sphinxapi.php(2)开始执行查询的操作$sc = new SphinxClient();$sc-setServer(localhost,9312);$sc-query(关键词,定义索引的名称);$keyword = “电影”$indexName = movie$res = $sc-query($keyword,$indexName);array_keys($resmatches);/返回的是一个一维数组,具体的代码如下;5、对查询到关键词进行标注显示,可以对关键词添加一些样式,进行显示。使用一个方法$sc-buildExcerpts(),给关键词添加样式显示。foreach($data as $v) /参数1:在此处循环的一维数组 /参数2:是索引的名称 /参数3:是查询的关键词 /参数4:是添加的样式 /该函数返回的结果是一个索引数组了。 $row = $sc-buildExcerpts($v,$indexName,$keyword,array( before_match= , after_match= ); echo $row1.; echo $row2.;访问效果如下;四、sphinx的匹配模式1、SPH_MATCH_ALL 完全匹配所有的词如“冬天 的 雪”,并不会匹配 “我爱冬天”,但可以匹配 “我的朋友,爱冬天,和雪”。因为“冬天的雪” 被分成 “冬天”,“的”,“雪”三个词,匹配条件是同时包含这三个词,“我爱冬天”里只包含一个“冬天”$keyword = “中国香港”;$indexName = movie;$sc-setMatchMode(SPH_MATCH_ALL);2、SPH_MATCH_ANY: 匹配任意一个词如“冬天 的 雪”,并会匹配 “我爱冬天”。冬天的雪“ - ”冬天“ ”的“ ”雪“因为“我爱冬天”里有一个“冬天”相匹配。$keyword = “中国百团”;$indexName = movie;$sc-setMatchMode(SPH_MATCH_ANY);效果:3、SPH_MATCH_PHRASE: 必须匹配整个短语,不能分割。如“冬天的雪”,不会匹配 “我的朋友,爱冬天,和雪”,虽然都包含同样的 $keyword = “武侠电影”;$indexName = movie;$sc-setMatchMode(SPH_MATCH_PHRASE);4、SPH_MATCH_EXTENDED: 支持一些扩展的语法支持 字段 查询如,查询title包含 abc , content 包含 bcd的:title abc content bcd$keyword = “title 中国”;$indexName = ;$sc-setMatchMode(SPH_MATCH_EXTENDED);5、SPH_MATCH_BOOLEAN 与,或,非,分组 &,or,!,()如:hello | world查询“手机”,或“冬天”,:$keyword = “大陆|内地”;$indexName = movie;$sc-setMatchMode(SPH_MATCH_BOOLEAN);五、增量索引可以对后来增加的数据,单独建立索引,把建立的索引再合并到主索引里面。新增数据的索引: 实现原理:1、新建一张表,记录一下上次已经创建好索引的最后一条记录的id 2、当索引时,然后从数据库中取出所有大于id的数据,这些就是新的数据然后创建一个小的索引文件。3、把增量这部分数据生成的小的索引合并到主索引文件上去。4、把最后一条记录的id更新到第一步创建的表中。原理图:步骤:(1)创建一张表,用于存储记录最大的 idcreate table a(max_id int);insert into a values(0);(2)修改配置文件,movie的主索引的数据源的配置。sql_query = select id,title,description from movie执行完成主查询后,执行的一个sql语句;sql_query_post = update a set max_id = (select max(id) from movie);(3)创建增量数据源和增量数据源对应的索引配置。sql_query = select id,title,description from movie where id(select max_id from a);(4)生成主索引,在重新生成主索引时,要停止sphinx服务器;indexer c d:/wamp/sphinx/sphinx.conf movie执行完毕后,a表里面,已经记录了movie表里面的最大id(5)添加数据到数据库里面,(6)创建增量索引indexer c d:/wamp/sphinx/sphinx.conf movie_zl创建的增量索引如下;(7)把增量索引合并到主索引里面。合并的语法:indexer c 配置文件 -merge 主索引文件 增量索引文件indexer c d:/wamp/sphinx/sphinx.conf -merge movie movie_zl(7)启动sphinx的服务器,进行查询操作注意;如果不关闭sphinx服务器,需要在合并时添加一个参数 -rotate 强制合并的意思indexer c 配置文件 -merge 主索引文件 增量索引文件 -rotate六、网页静态化介绍1、概述:就是把一个动态的页面(.php)变成一个静态页面(.html),后续用户直接访问静态页面。页面静态化技术分为两种:真静态和伪静态。真静态:把一个动态的页面,转成一个静态的页面,即.html文件伪静态:所谓伪静态是从url地址上看是一个静态页面,但是实际上还是对应一个动态页面,比如:/news-sport-id12.html实际上是操作。/news.php?type=sport&id=12,2、几个重要的概念(1)动态网址:所谓动态网址,一般来说去查询数据库,比如:/goods.php?id=20特点:查询数据库,速度慢;接收参数,安全性要注意(sql注入);不利于seo搜索引擎优化。(2)静态网址比如:/index.htm这个就是一个静态网址:特点:不查询数据库,速度快;不接收参数,安全性高;利于seo(3)伪静态网址:从形式上看是一个静态页面,但是实际上对应一个动态页面,特点:本身需要查询数据库,执行速度慢;不接收参数,因此安全;利于seo3、真静态实现方式真静态:使用ob缓存技术来实现,伪静态:使用web服务器的rewrite机制(url的重写机制)来实现。4、OB基本介绍ob就是output_buffering输出缓存,在请求一个php的过程中,我们实际上经过三个缓存,程序缓存、ob缓存、浏览器缓存。(1)程序缓存(默认开启,不能关闭)该缓存是php固有的,不能关闭,缓存返回到客户端(浏览器端包括头信息和响应主体信息)的数据。(2)ob缓存(默认开启,可以关闭)ob缓存(output_buffering)又叫ob缓冲:缓存响应主体的数据,在请求一个php文件时,实际上是经过3个缓存区,ob缓存(如果开启)-程序缓存-浏览器缓存。如果开辟了ob缓存,主体数据首先存储到ob缓存里面,头信息要存储到程序缓存(无论是否开启ob缓存),当代码执行完毕后,ob缓存里面的数据刷新(移动)到程序缓存,程序缓存再输出到浏览器缓存中,最后输出内容。开启方式:(1)通过在页面中使用函数ob_start(),如果使用该函数,则只对当前页面有效。(2)通过php.ini配置文件来开启。output_buffering = 40964096是设置ob缓存的容量,也可以不指定容量开启,使用onoutput_buffering=on|off|具体的容量5、ob 缓存对应的函数。ob_start();开启ob 缓存,在当前页面有效ob_get_contents();/获取ob缓存里面的数据。ob_clean();清空ob缓存里面的数据,没有关闭ob缓存。ob_end_clean();清空ob缓存里面的数据,并关闭ob缓存。ob_flush();/把ob缓存里面的数据,刷新(移动)到程序缓存,不关闭ob缓存。ob_end_flush();/把ob缓存里面的数据刷新(移动,推送)到程序缓存,并关闭ob缓存。ob_gzhandler();函数,对数据进行压缩,依赖于浏览器所能接受的压缩格式,形成不同的压缩编码。ob_start(ob_gzhandler);可以对ob缓存里面的数据进行压缩后返回数据。总结:常用的是:ob_start() ob_get_contents() ob_clean()$content = ob_get_contents();file_put_contents(index.html,$content);6、真静态典型案例。需要操作:目标:要判断有没有生成静态页面,如果有静态页面,则直接读取静态页面里面内容,如果没有则要重新生成静态页面。新闻列表页面:list.php新闻详情页面是:shownews.php页面。$filename = news_id.$id.html;if(file_exists($filename)include $filename;exit;$content = ob_get_contents();file_put_contents($filename,$content);7、真静态典型案例扩展给生成的静态页面一个缓存周期,比如缓存5分钟,过了5分钟之后,则要重新生成静态页面。比如缓存5分钟,300秒,判断是否在缓存周期内,文件的最后修改时间+缓存周期 当前的时间戳。filemtime 取得文件修改时间,返回的是时间戳。if(file_exists($filename) & $filemtime($filename)+300time()include $filename;exit;8、真静态优缺点说明:优点: (1)速度快 (2)安全性高 (3)利于seo 缺点:就是占有磁盘空间., 如果过大,对磁盘响应速度有影响。在什么情况下,建议不要使用真静态(1)页面的数据更新频繁,最好不要使用真静态(比如股票,基金,等实时报价系统)(2)会生成海量页面(比如大型论坛 bbs ,csdn)(3)查询该页面一次后,以后再也不查询该页面.(4)不愿意被搜索引擎抓取的页面.(5)访问量小的页面.七、伪静态概述:在实际开发项目中,我们的页面不适合使用真静态,但是你不仅希望页面安全性高,同时利于seo,可以考虑使用伪静态技术。伪静态:把一个动态的地址伪装成一个静态的地址。比如:原来的访问地址是:/news.php?type=sport&id=2改成/news-sport-id.html1、实现方式实现方式:利用web服务器的rewrite机制。rewrite机制:将一个请求URL重写到另一个请求上!在rewrite机制中,使用正则表达式来完成重写规则。比如:index.html 重写成 index.phpabc.php 重写成 123.phpnews_sport_id12.html 重写成 news.php?type=sport&id=12原理图:2、如何开启找apache服务器的配置文件httpd.confLoadModule rewrite_module modules/mod_rewrite.so3、具体配置:三个指令:RewriteEngine on 开启重写模块,RewriteCond 重写条件RewriteRule 重写规则。(1)RewriteEngine on 重写引擎开关,一旦开启,所有的重写条件都生效。(2)RewriteCond 重写条件,当达到什么条件时,完成重写。语法为:RewriteCond 判断依据 条件表达式 条件标志判断依据可以使用服务器变量。服务器可以得到一些特定信息条件表达式,可以为如下形式:正则或特殊标识-f 表示是一个文件,!-f 不是文件-d 表示是一个目录,!-d 不是目录正则,正则表达式字符串。条件标志:OR条件间的或者关系,当出现多个条件时,默认为并且的关系,条件应该是或者的关系下,可以使用OR来表示!NC条件不区分大小写。条件匹配时不区分大小写OR,NC(3)RewriteRule :定义重写规则RewriteRule :定义重写规则,哪个地址应该被重写到哪个目标地址。语法:RewriteRule匹配地址 目标地址 标识匹配的地址:所请求的地址,可使用正则匹配目标地址:所重写到的地址,可以使用反向引用!$N表示正则匹配到的第N个子模式!比如:RewriteRule goods-id(d+).html goods.php?id=$1标志:NC不区分大小写QSA查询字符串追加,在目标地址已经具有get参数时,会将真实请求的get参数追后边。案例:当访问index.html页面时,重写到index.php页面我们使用分布式文件配置来完成,.htaccess文件步骤:第一步:打开虚拟主机里面的配置,配置支持分布式配置。第二步:在e:/amp/home目录下面新建一个.htaccess文件通过编辑器另存为的方式建立.htaccess文件第三步:在.htaccess文件里面进行具体的配置。 RewriteEngine onRewriteRule index.html index.php第四步:在网站的根目录下面,新建一个 index.php文件,进行测试效果4、入门案例如果访问的文件存在,则访
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年信息技术对社会的影响考试试卷及答案
- 2025年师范生教育理论考试试题及答案
- 2025年气候变化与应对考试试题及答案
- 2025年会计电算化考试试卷及答案解析
- 2025年化学专业认证考试试卷及答案
- 2025年电子商务运营师培训考试试题及答案
- 2025年供应链金融与风险控制考试试题及答案
- 2025年广告学专业理论知识测试试题及答案
- 农业项目农产品采购协议
- 岳阳楼记文章主旨和修辞教学教案
- 封底混凝土计算
- n系列蒸汽型溴化锂吸收式冷水机组f.ju.1
- 附件9:未取得国外国籍的声明
- 2022年DPI610-615型便携式压力校验仪操作规程
- 数学分析试题及答案(两份)
- 司炉岗位应急处置卡(燃气)参考
- 最新四川省教师资格认定体检表
- 儿童手机设计报告
- 防眩板施工组织设计
- 公路交通工程及安全设施施工指导意见
- 干式变压器企业标准
评论
0/150
提交评论