




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第一部分-分析与思思路:实际际项目的特特点是:11.数据量量大2.商商品分类多多3.每个个商品可以以处于多个个分类下44.平均每每个商品拥拥有2个以以上的属性性要求可以做做到:1.按照商品品名称搜索索2.按照照商品属性性筛选3.按照分类类筛选4.按照价格格分组筛选选5.按照照价格、时时间排序MySQLL基本数据据结构:说明:prroducct是基本本产品表,iid为产品品编号,nname是是待搜索字字段prooductt_inddex为产产品属性表表,inddex_iid是属性性编号,pproduuct_iid为prroducct表的iid。如果果编号为1100的产产品,有55个 不同同属性,
2、在在prodduct_indeex表中就就会记录pproduuct_iid为1000,inndex_id不相相同的五条条记录。pproduuct_sshow的的结构与pproduuct_iindexx类似,记记录的是产产品于分类类的联系,如如果同一个个产品同属属5个不同同的分类,在在表中就会会存在五条条记录。数据结构不不复杂,但但是实际应应用中,使使用Myssql的查查询实现的的搜索和检检索,效率率是比较低低的。最消消耗性能的的地方是产产品列表的的索引导航航,这是类类似淘宝网网产品列表表的”按XXXX浏览览”: SQL的实实现不多说说。在Sphiinx有个个非常棒的的特性:MMVA(多多值属性
3、),MMVA类似似Mysqql的seet类型的的字段,但但是存放值值不受预设设的限制,使使用MVAA建立Spphinxx的属性,用用来存放每每个产品的的indeex_idd和cattegorry_idd,很方便便就能实现现筛选功能能。第二部分-索引结构构配置:SSphinnx配置文文件贴出主主要部分,其其他的手册册上说的很很清楚了(手手册非常重重要: HYPERLINK /uploads/pdf/sphinx_doc_zhcn_0.9.pdf htttp:/n/uplloadss/pdff/sphhinx_doc_zhcnn_0.99.pdff)。上面是soourcee部分,项项目的编码码是U
4、TFF-8,所所以首先得得执行:“SET NAMEES uttf8”。prodduct里里面的prrice是是以保留两两位小数的的形式存放放的,在ssql_qqueryy里面,将将它乘以1100换成成整数,避避免浮点精精度带来的的不必要的的小数位。关键的两两条“sqql_atttr_mmultii”,配置置了属性和和分类的MMVA,“fromm queery”后后面紧接着着SQL,表表示来自查查询,prroducct_idd放第一个个字段,后后面跟着值值字段,这这样Sphhinx内内部才会进进行处理。建立索引后后,结构可可以看成下下图所示:第三部分-查询:SSphinnx自带的的PHP的的AP
5、I进进行查询。示例1:编号为11,2,33,4,55的5个分分类下的产产品列表:$Sphiinx-SetFFilteer(cateegoryy_id,arrray(1,2,3,4,5);$Sphiinx-Querry(”,*);示例2:属属性编号为为1,2,3,4,5的下的的产品列表表(属性的的交集)$Sphiinx-SetFFilteer(indeex_idd,aarrayy(1);$Sphiinx-SetFFilteer(indeex_idd,aarrayy(2);$Sphiinx-SetFFilteer(indeex_idd,aarrayy(3);$Sphiinx-SetFFilteer
6、(indeex_idd,aarrayy(4);$Sphiinx-SetFFilteer(indeex_idd,aarrayy(5);$Sphiinx-Querry(”,*);示例3:属属性编号为为1,2,3,4,5的下的的产品列表表(属性的的交集)的的价格分组组,并且升升序排列$Sphiinx-SetFFilteer(indeex_idd,aarrayy(1);$Sphiinx-SetFFilteer(indeex_idd,aarrayy(2);$Sphiinx-SetFFilteer(indeex_idd,aarrayy(3);$Sphiinx-SetFFilteer(indeex_idd,
7、aarrayy(4);$Sphiinx-SetFFilteer(indeex_idd,aarrayy(5);$Sphiinx-SetGGrouppBy(priice,SPHH_GROOUPBYY_ATTTR,grooup aasc);$Sphiinx-Querry(”,*);示例4:属属性编号为为1,2,3,4,5的下的的产品列表表(属性的的交集),分类编号号是7,88,9$Sphiinx-SetFFilteer(cateegoryy_id,arrray(7,8,9);$Sphiinx-SetFFilteer(indeex_idd,aarrayy(1);$Sphiinx-SetFFilteer
8、(indeex_idd,aarrayy(2);$Sphiinx-SetFFilteer(indeex_idd,aarrayy(3);$Sphiinx-SetFFilteer(indeex_idd,aarrayy(4);$Sphiinx-SetFFilteer(indeex_idd,aarrayy(5);$Sphiinx-SetGGrouppBy(priice,SPHH_GROOUPBYY_ATTTR,grooup aasc);$Sphiinx-Querry(”,*);Sphinnx的查询询使用还是是很方便的的,需要注注意的是,Filtter传递递的待筛选选参数必须须是数组;关于MVAA的使用,
9、如果数组组有多个成成员:$Sphiinx-SetFFilteer(cateegoryy_id,arrray(7,8,9);表示索引中中的cattegorry_idd满足数组组中的任意意一个值就就会筛选出出来.$Sphiinx-SetFFilteer(indeex_idd,aarrayy(7);$Sphiinx-SetFFilteer(indeex_idd,aarrayy(8);$Sphiinx-SetFFilteer(indeex_idd,aarrayy(9);表示索引中中的inddex_iid包含77,8,99三个值才才会被筛选选出.MVA也可可以用来进进行Grooup操作作:$Spphin
10、xx-SeetGrooupByy( iindexx_vallue_iid, SPH_GROUUPBY_ATTRR );可以很方便便的得出当当前条件下下的,各种种属性(样样式,品牌牌)的数数量.第四部分-即时更新新方案:使使用了Spphinxx代替了MMysqll进行查询询后,最大大的问题还还在于数据据的更新问问题:我们们在后台进进行了产品品的编辑,删除,添添加操作,都需要尽尽快的反应应到用户端端.架构图图:说明:(11).在MMysqll中建立一一个增量表表,凡是产产品更新操操作(添加加,修改,删除),都会将相相关ID更更新到到增增量表;表表结构很简简单,只记记录ID.(2).修修改Sphhi
11、nx的的配置文件件sql_qqueryy=SSELECCT idd,naame,pricce*1000ASSpriice,0ASSin_updaate FFROM shopp_prooducttsql_aattr_uintt=iin_uppdatee增加了一个个字段inn_upddate,用来标记记主索引的的这条记录录,是否在在增量表中中.(3).产产品的更新新操作时,除了更新新增量表,同时也利利用Sphhinx API的的UpdaateAtttribbutess方法,将将主索引中中的相关记记录的inn_upddate属属性设置成成”1$thiss-Spphinxx-UppdateeAttrr
12、ibuttes($inddex,arraay(in_uupdatte),arrray($idd=1);代码中的$id指的的是商品编编号.更新完了属属性后,发发出增量索索引更新通通知,可以以是写队列列,写文件件等方式.(4).在在查询时,增加过滤滤器.$Sphiinx-SetFFilteer(in_uupdatte,arraay(0);这样,就不不会使用到到主索引中中的处于增增量索引中中的docc,以免搜搜索到错误误的编辑前前的数据.(5).守守护进程接接到增量索索引更新通通知,重建建增量索引引.(6).每每天某时段段更新主索索引,清空空增量表,清空增量量索引思路就是这这样,下面面的增量索索引更
13、新脚脚本是我用用在测试环环境的,生生产环境的的比较复杂杂,供参考考.#!/biin/baashCHECKK_FILLE_PAATH=/xxxx/sphhinx-checck.txxtSPHINNX_COOMMANND=”/opt/sphiinx/bbin/iindexxer conffig /opt/sphiinx/eetc/pproduuct.cconf prodduct_updaate_iindexx rootatee”whileetruuedoNOW_TIMEE=daate+%Y-%m-%d %HH:%M:%Sif-f$CHEECK_FFILE_PATHH;tthen WORRD_NUU
14、M=ccat $CHEECK_FFILE_PATHH|wwc-wwif$WWORD_NUM-gt0;thenn eccho”buliid $NNOW_TTIME” $SSPHINNX_COOMMANND $CHEECK_FFILE_PATHHelsse eccho”skipp $NOOW_TIIME” fielseeechho”nnofille $NNOW_TTIME”fisleeep300done后台操作时时,简单的的用写文件件的方式通通知索引更更新脚本,索引更新新完成后,将文件重重置.第五部分-优化总结结:这几篇篇blogg,没想过过写成手把把手的教程程,只是想想把思路写写出来,和和大家交流流,所以流流水账了代码都是是些关键片片段,不负负责它正常常运行!基基础方面的的请到Spphinxx官方站查查看文档,非常详细细!谈几点优化化方面的建建议
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 汽车和食品合作协议书
- 无纸化商户签约协议书
- 课程置换协议书
- 联通授权协议书
- 自驾免责协议书
- 药厂授权协议书
- 平台店铺代运营协议书
- 药品三方协议书
- 豪车合成协议书
- 旧房屋顶翻合同协议书
- 病假医疗期申请单(新修订)
- 钻孔桩钻孔记录表(旋挖钻)
- 660MW机组金属监督项目
- JBK-698CX淬火机数控系统
- ZJUTTOP100理工类学术期刊目录(2018年版)
- 心理学在船舶安全管理中的应用
- JJF(鄂) 90-2021 电子辊道秤校准规范(高清版)
- 超星尔雅学习通《今天的日本》章节测试含答案
- 餐饮量化分级
- 三一重工SCC2000履带吊履带式起重机技术参数
- [精品]GA38-2004《银行营业场所风险等级和防护级别的规定》
评论
0/150
提交评论