Sphinx在電子商務(wù)網(wǎng)站中的應(yīng)用_第1頁(yè)
Sphinx在電子商務(wù)網(wǎng)站中的應(yīng)用_第2頁(yè)
Sphinx在電子商務(wù)網(wǎng)站中的應(yīng)用_第3頁(yè)
Sphinx在電子商務(wù)網(wǎng)站中的應(yīng)用_第4頁(yè)
Sphinx在電子商務(wù)網(wǎng)站中的應(yīng)用_第5頁(yè)
已閱讀5頁(yè),還剩5頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、第一部分-分析與思思路:實(shí)際際項(xiàng)目的特特點(diǎn)是:11.數(shù)據(jù)量量大2.商商品分類多多3.每個(gè)個(gè)商品可以以處于多個(gè)個(gè)分類下44.平均每每個(gè)商品擁?yè)碛?個(gè)以以上的屬性性要求可以做做到:1.按照商品品名稱搜索索2.按照照商品屬性性篩選3.按照分類類篩選4.按照價(jià)格格分組篩選選5.按照照價(jià)格、時(shí)時(shí)間排序MySQLL基本數(shù)據(jù)據(jù)結(jié)構(gòu):說(shuō)明:prroducct是基本本產(chǎn)品表,iid為產(chǎn)品品編號(hào),nname是是待搜索字字段prooductt_inddex為產(chǎn)產(chǎn)品屬性表表,inddex_iid是屬性性編號(hào),pproduuct_iid為prroducct表的iid。如果果編號(hào)為1100的產(chǎn)產(chǎn)品,有55個(gè) 不同同屬性,

2、在在prodduct_indeex表中就就會(huì)記錄pproduuct_iid為1000,inndex_id不相相同的五條條記錄。pproduuct_sshow的的結(jié)構(gòu)與pproduuct_iindexx類似,記記錄的是產(chǎn)產(chǎn)品于分類類的聯(lián)系,如如果同一個(gè)個(gè)產(chǎn)品同屬屬5個(gè)不同同的分類,在在表中就會(huì)會(huì)存在五條條記錄。數(shù)據(jù)結(jié)構(gòu)不不復(fù)雜,但但是實(shí)際應(yīng)應(yīng)用中,使使用Myssql的查查詢實(shí)現(xiàn)的的搜索和檢檢索,效率率是比較低低的。最消消耗性能的的地方是產(chǎn)產(chǎn)品列表的的索引導(dǎo)航航,這是類類似淘寶網(wǎng)網(wǎng)產(chǎn)品列表表的”按XXXX瀏覽覽”: SQL的實(shí)實(shí)現(xiàn)不多說(shuō)說(shuō)。在Sphiinx有個(gè)個(gè)非常棒的的特性:MMVA(多多值屬性

3、),MMVA類似似Mysqql的seet類型的的字段,但但是存放值值不受預(yù)設(shè)設(shè)的限制,使使用MVAA建立Spphinxx的屬性,用用來(lái)存放每每個(gè)產(chǎn)品的的indeex_idd和cattegorry_idd,很方便便就能實(shí)現(xiàn)現(xiàn)篩選功能能。第二部分-索引結(jié)構(gòu)構(gòu)配置:SSphinnx配置文文件貼出主主要部分,其其他的手冊(cè)冊(cè)上說(shuō)的很很清楚了(手手冊(cè)非常重重要: HYPERLINK /uploads/pdf/sphinx_doc_zhcn_0.9.pdf htttp:/n/uplloadss/pdff/sphhinx_doc_zhcnn_0.99.pdff)。上面是soourcee部分,項(xiàng)項(xiàng)目的編碼碼是U

4、TFF-8,所所以首先得得執(zhí)行:“SET NAMEES uttf8”。prodduct里里面的prrice是是以保留兩兩位小數(shù)的的形式存放放的,在ssql_qqueryy里面,將將它乘以1100換成成整數(shù),避避免浮點(diǎn)精精度帶來(lái)的的不必要的的小數(shù)位。關(guān)鍵的兩兩條“sqql_atttr_mmultii”,配置置了屬性和和分類的MMVA,“fromm queery”后后面緊接著著SQL,表表示來(lái)自查查詢,prroducct_idd放第一個(gè)個(gè)字段,后后面跟著值值字段,這這樣Sphhinx內(nèi)內(nèi)部才會(huì)進(jìn)進(jìn)行處理。建立索引后后,結(jié)構(gòu)可可以看成下下圖所示:第三部分-查詢:SSphinnx自帶的的PHP的的AP

5、I進(jìn)進(jìn)行查詢。示例1:編號(hào)為11,2,33,4,55的5個(gè)分分類下的產(chǎn)產(chǎn)品列表:$Sphiinx-SetFFilteer(cateegoryy_id,arrray(1,2,3,4,5);$Sphiinx-Querry(”,*);示例2:屬屬性編號(hào)為為1,2,3,4,5的下的的產(chǎn)品列表表(屬性的的交集)$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:屬屬性編號(hào)為為1,2,3,4,5的下的的產(chǎn)品列表表(屬性的的交集)的的價(jià)格分組組,并且升升序排列$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:屬屬性編號(hào)為為1,2,3,4,5的下的的產(chǎn)品列表表(屬性的的交集),分類編號(hào)號(hào)是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的查詢?cè)兪褂眠€是是很方便的的,需要注注意的是,Filtter傳遞遞的待篩選選參數(shù)必須須是數(shù)組;關(guān)于MVAA的使用,

9、如果數(shù)組組有多個(gè)成成員:$Sphiinx-SetFFilteer(cateegoryy_id,arrray(7,8,9);表示索引中中的cattegorry_idd滿足數(shù)組組中的任意意一個(gè)值就就會(huì)篩選出出來(lái).$Sphiinx-SetFFilteer(indeex_idd,aarrayy(7);$Sphiinx-SetFFilteer(indeex_idd,aarrayy(8);$Sphiinx-SetFFilteer(indeex_idd,aarrayy(9);表示索引中中的inddex_iid包含77,8,99三個(gè)值才才會(huì)被篩選選出.MVA也可可以用來(lái)進(jìn)進(jìn)行Grooup操作作:$Spphin

10、xx-SeetGrooupByy( iindexx_vallue_iid, SPH_GROUUPBY_ATTRR );可以很方便便的得出當(dāng)當(dāng)前條件下下的,各種種屬性(樣樣式,品牌牌)的數(shù)數(shù)量.第四部分-即時(shí)更新新方案:使使用了Spphinxx代替了MMysqll進(jìn)行查詢?cè)兒?最大大的問題還還在于數(shù)據(jù)據(jù)的更新問問題:我們們?cè)诤笈_(tái)進(jìn)進(jìn)行了產(chǎn)品品的編輯,刪除,添添加操作,都需要盡盡快的反應(yīng)應(yīng)到用戶端端.架構(gòu)圖圖:說(shuō)明:(11).在MMysqll中建立一一個(gè)增量表表,凡是產(chǎn)產(chǎn)品更新操操作(添加加,修改,刪除),都會(huì)將相相關(guān)ID更更新到到增增量表;表表結(jié)構(gòu)很簡(jiǎn)簡(jiǎn)單,只記記錄ID.(2).修修改Sphhi

11、nx的的配置文件件sql_qqueryy=SSELECCT idd,naame,pricce*1000ASSpriice,0ASSin_updaate FFROM shopp_prooducttsql_aattr_uintt=iin_uppdatee增加了一個(gè)個(gè)字段inn_upddate,用來(lái)標(biāo)記記主索引的的這條記錄錄,是否在在增量表中中.(3).產(chǎn)產(chǎn)品的更新新操作時(shí),除了更新新增量表,同時(shí)也利利用Sphhinx API的的UpdaateAtttribbutess方法,將將主索引中中的相關(guān)記記錄的inn_upddate屬屬性設(shè)置成成”1$thiss-Spphinxx-UppdateeAttrr

12、ibuttes($inddex,arraay(in_uupdatte),arrray($idd=1);代碼中的$id指的的是商品編編號(hào).更新完了屬屬性后,發(fā)發(fā)出增量索索引更新通通知,可以以是寫隊(duì)列列,寫文件件等方式.(4).在在查詢時(shí),增加過(guò)濾濾器.$Sphiinx-SetFFilteer(in_uupdatte,arraay(0);這樣,就不不會(huì)使用到到主索引中中的處于增增量索引中中的docc,以免搜搜索到錯(cuò)誤誤的編輯前前的數(shù)據(jù).(5).守守護(hù)進(jìn)程接接到增量索索引更新通通知,重建建增量索引引.(6).每每天某時(shí)段段更新主索索引,清空空增量表,清空增量量索引思路就是這這樣,下面面的增量索索引更

13、新腳腳本是我用用在測(cè)試環(huán)環(huán)境的,生生產(chǎn)環(huán)境的的比較復(fù)雜雜,供參考考.#!/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后臺(tái)操作時(shí)時(shí),簡(jiǎn)單的的用寫文件件的方式通通知索引更更新腳本,索引更新新完成后,將文件重重置.第五部分-優(yōu)化總結(jié)結(jié):這幾篇篇blogg,沒想過(guò)過(guò)寫成手把把手的教程程,只是想想把思路寫寫出來(lái),和和大家交流流,所以流流水賬了代碼都是是些關(guān)鍵片片段,不負(fù)負(fù)責(zé)它正常常運(yùn)行!基基礎(chǔ)方面的的請(qǐng)到Spphinxx官方站查查看文檔,非常詳細(xì)細(xì)!談幾點(diǎn)優(yōu)化化方面的建建議

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論