版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第一部分-分析與思路:實際項目的特點是:1.數據量大2.商品分類多3.每個商品可以處于多個分類下4.平均每個商品擁有2個以上的屬性要求可以做到:1.按照商品名稱搜索2.按照商品屬性篩選3.按照分類篩選4.按照價格分組篩選5.按照價格、時間排序MySQL基本數據結構:說明:prodduct是基基本產品表,iid為產品編編號,namme是待搜索索字段prooduct_indexx為產品屬性性表,inddex_idd是屬性編號號,prodduct_iid為prooduct表表的id。如如果編號為1100的產品品,有5個 不同屬性,在在produuct_inndex表中中就會記錄pproducct_i
2、d為為100,iindex_id不相同同的五條記錄錄。prodduct_sshow的結結構與prooduct_indexx類似,記錄錄的是產品于于分類的聯系系,如果同一一個產品同屬屬5個不同的的分類,在表表中就會存在在五條記錄。數據結構不復雜雜,但是實際際應用中,使使用Mysqql的查詢實實現的搜索和和檢索,效率率是比較低的的。最消耗性性能的地方是是產品列表的的索引導航,這這是類似淘寶寶網產品列表表的”按XXXX瀏覽”: SQL的實現不不多說。在Sphinxx有個非常棒棒的特性:MMVA(多值值屬性),MMVA類似MMysql的的set類型型的字段,但但是存放值不不受預設的限限制,使用MMVA
3、建立SSphinxx的屬性,用用來存放每個個產品的inndex_iid和cattegoryy_id,很很方便就能實實現篩選功能能。第二部分-索引引結構配置:Sphinnx配置文件件貼出主要部部分,其他的的手冊上說的的很清楚了(手手冊非常重要要: HYPERLINK /uploads/pdf/sphinx_doc_zhcn_0.9.pdf httpp:/uploaads/pddf/sphhinx_ddoc_zhhcn_0.9.pdff)。上面是sourrce部分,項項目的編碼是是UTF-88,所以首先先得執(zhí)行:“SSET NAAMES uutf8”。pproducct里面的pprice是是以保留
4、兩位位小數的形式式存放的,在在sql_qquery里里面,將它乘乘以100換換成整數,避避免浮點精度度帶來的不必必要的小數位位。關鍵的兩兩條“sqll_attrr_multti”,配置置了屬性和分分類的MVAA,“froom queery”后面面緊接著SQQL,表示來來自查詢,pproducct_id放放第一個字段段,后面跟著著值字段,這這樣Sphiinx內部才才會進行處理理。建立索引后,結結構可以看成成下圖所示:第三部分-查詢詢:Sphiinx自帶的的PHP的AAPI進行查查詢。示例11:編號為11,2,3,4,5的55個分類下的的產品列表:$Sphinxx-SettFilteer(ccat
5、egoory_idd,arrray(11,2,3,4,5);$Sphinxx-Queery(”,*);示例2:屬性編編號為1,22,3,4,5的下的產產品列表(屬屬性的交集)$Sphinxx-SettFilteer(iindex_id,arrayy(1);$Sphinxx-SettFilteer(iindex_id,arrayy(2);$Sphinxx-SettFilteer(iindex_id,arrayy(3);$Sphinxx-SettFilteer(iindex_id,arrayy(4);$Sphinxx-SettFilteer(iindex_id,arrayy(5);$Sphinxx
6、-Queery(”,*);示例3:屬性編編號為1,22,3,4,5的下的產產品列表(屬屬性的交集)的價格分組組,并且升序序排列$Sphinxx-SettFilteer(iindex_id,arrayy(1);$Sphinxx-SettFilteer(iindex_id,arrayy(2);$Sphinxx-SettFilteer(iindex_id,arrayy(3);$Sphinxx-SettFilteer(iindex_id,arrayy(4);$Sphinxx-SettFilteer(iindex_id,arrayy(5);$Sphinxx-SettGrouppBy(pricee,SPP
7、H_GROOUPBY_ATTR,grroup aasc);$Sphinxx-Queery(”,*);示例4:屬性編編號為1,22,3,4,5的下的產產品列表(屬屬性的交集),分類編號號是7,8,9$Sphinxx-SettFilteer(ccategoory_idd,arrray(77,8,9);$Sphinxx-SettFilteer(iindex_id,arrayy(1);$Sphinxx-SettFilteer(iindex_id,arrayy(2);$Sphinxx-SettFilteer(iindex_id,arrayy(3);$Sphinxx-SettFilteer(iindex_
8、id,arrayy(4);$Sphinxx-SettFilteer(iindex_id,arrayy(5);$Sphinxx-SettGrouppBy(pricee,SPPH_GROOUPBY_ATTR,grroup aasc);$Sphinxx-Queery(”,*);Sphinx的的查詢使用還還是很方便的的,需要注意意的是,Fiilter傳傳遞的待篩選選參數必須是是數組;關于MVA的使使用,如果數數組有多個成成員:$Sphinxx-SettFilteer(ccategoory_idd,arrray(77,8,9);表示索引中的ccategoory_idd滿足數組中中的任意一個個值就會篩選選
9、出來.$Sphinxx-SettFilteer(iindex_id,arrayy(7);$Sphinxx-SettFilteer(iindex_id,arrayy(8);$Sphinxx-SettFilteer(iindex_id,arrayy(9);表示索引中的iindex_id包含77,8,9三三個值才會被被篩選出.MVA也可以用用來進行Grroup操作作:$Sphhinx-SetGrroupByy( inndex_vvalue_id, SPH_GGROUPBBY_ATTTR );可以很方便的得得出當前條件件下的,各種種屬性(樣式式,品牌)的數量.第四部分-即時時更新方案:使用了Spphi
10、nx代代替了Myssql進行查查詢后,最大大的問題還在在于數據的更更新問題:我我們在后臺進進行了產品的的編輯,刪除除,添加操作作,都需要盡盡快的反應到到用戶端.架架構圖:說明:(1).在Mysqql中建立一一個增量表,凡是產品更更新操作(添添加,修改,刪除),都都會將相關IID更新到到到增量表;表表結構很簡單單,只記錄IID.(2).修改SSphinxx的配置文件件sql_queery=SELECCT id,namee,priice*1000ASpricee,0AASin_updatte FROOM shoop_prooductsql_atttr_uinnt=iin_upddate增加了一個字
11、段段in_uppdate,用來標記主主索引的這條條記錄,是否否在增量表中中.(3).產品的的更新操作時時,除了更新新增量表,同同時也利用SSphinxx API的的UpdatteAttrributees方法,將將主索引中的的相關記錄的的in_uppdate屬屬性設置成”11$this-Sphinnx-UppdateAAttribbutes($inddex,aarray(in_updatte),arraay($iid=1);代碼中的$idd指的是商品品編號.更新完了屬性后后,發(fā)出增量量索引更新通通知,可以是是寫隊列,寫寫文件等方式式.(4).在查詢詢時,增加過過濾器.$Sphinxx-SettF
12、ilteer(iin_upddate,arraay(0);這樣,就不會使使用到主索引引中的處于增增量索引中的的doc,以以免搜索到錯錯誤的編輯前前的數據.(5).守護進進程接到增量量索引更新通通知,重建增增量索引.(6).每天某某時段更新主主索引,清空空增量表,清清空增量索引引思路就是這樣,下面的增量量索引更新腳腳本是我用在在測試環(huán)境的的,生產環(huán)境境的比較復雜雜,供參考.#!/bin/bashCHECK_FFILE_PPATH=/xxx/sphinnx-cheeck.txxtSPHINX_COMMAAND=”/opt/ssphinxx/bin/indexxer cconfigg /optt/s
13、phiinx/ettc/prooduct.conf produuct_uppdate_indexx rottate”whilettruedoNOW_TIIME=ddate+%Y-%m-%d %H:%MM:%Sif-f$CHHECK_FFILE_PPATH;thenn WORD_NUM=cat $CHECCK_FILLE_PATTH|wwc-wif$WORDD_NUM-gt00;thhen echoo”bullid $NOOW_TIMME” $SPHHINX_CCOMMANND $CCHECK_FILE_PATHelse echoo”skiip $NOWW_TIMEE” fielseecho”nofiile $NOOW_TIMME”fisleep30done后臺操作時,簡簡單的用寫文文件的方式通通知索引更新新腳本,索引引更新完成后后,將文件重重置.第五部分-優(yōu)化化總結:這幾幾篇blogg,沒想過寫寫成手把手的的教程,只是是想把思路寫寫出來,和大大家交流,所所以流水賬了了代碼都是是些關鍵片段段,不負責它它正常運行!基礎方面的的請到Sphhinx官方方站查看文檔檔,非常詳細細!談幾點優(yōu)化方面面的
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025版土地租賃及資源開發(fā)合同3篇
- 2025版二手豪華轎車買賣及車主尊享保養(yǎng)套餐合同3篇
- 山東省濟寧市曲阜市2024-2025學年九年級上學期期末歷史試題(含答案)
- 公共基礎-試驗檢驗師(含助理)《公共基礎》模擬試卷5
- 公交車輛電動化發(fā)展趨勢分析考核試卷
- 二零二五年港口拖輪服務與海運運輸合同3篇
- 2025年健康養(yǎng)生孕前保養(yǎng)合同
- 2025年在線美食分享平臺用戶注冊協議
- 2025年體育器材贈與協議
- 二零二五年肉牛養(yǎng)殖項目配套購牛合同3篇
- 湖北省黃石市陽新縣2024-2025學年八年級上學期數學期末考試題 含答案
- 硝化棉是天然纖維素硝化棉制造行業(yè)分析報告
- 央視網2025亞冬會營銷方案
- 《00541語言學概論》自考復習題庫(含答案)
- 《無砟軌道施工與組織》 課件 第十講雙塊式無砟軌道施工工藝
- 江蘇省南京市、鹽城市2023-2024學年高三上學期期末調研測試+英語+ 含答案
- 2024新版《藥品管理法》培訓課件
- 《阻燃材料與技術》課件 第7講 阻燃橡膠材料
- 爆炸物運輸安全保障方案
- 江蘇省南京市2025屆高三學業(yè)水平調研考試數學試卷(解析版)
- 2024年黑龍江省哈爾濱市中考數學試卷(附答案)
評論
0/150
提交評論