版權(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)是:1.數(shù)據(jù)量大2.商品分類多3.每個(gè)商品可以處于多個(gè)分類下4.平均每個(gè)商品擁有2個(gè)以上的屬性要求可以做到:1.按照商品名稱搜索2.按照商品屬性篩選3.按照分類篩選4.按照價(jià)格分組篩選5.按照價(jià)格、時(shí)間排序MySQL基本數(shù)據(jù)結(jié)構(gòu):說(shuō)明:product是基本產(chǎn)品表,id為產(chǎn)品編號(hào),name是待搜索字段product_index為產(chǎn)品屬性表,index_id是屬性編號(hào),product_id為product表的id。如果編號(hào)為100的產(chǎn)品,有5個(gè) 不同屬性,在product_index表中就會(huì)記錄product_id為100,index_id不相同的五條記錄。pr
2、oduct_show的結(jié)構(gòu)與product_index類似,記錄的是產(chǎn)品于分類的聯(lián)系,如果同一個(gè)產(chǎn)品同屬5個(gè)不同的分類,在表中就會(huì)存在五條記錄。數(shù)據(jù)結(jié)構(gòu)不復(fù)雜,但是實(shí)際應(yīng)用中,使用Mysql的查詢實(shí)現(xiàn)的搜索和檢索,效率是比較低的。最消耗性能的地方是產(chǎn)品列表的索引導(dǎo)航,這是類似淘寶網(wǎng)產(chǎn)品列表的”按XXX瀏覽”: SQL的實(shí)現(xiàn)不多說(shuō)。在Sphinx有個(gè)非常棒的特性:MVA(多值屬性),MVA類似Mysql的set類型的字段,但是存放值不受預(yù)設(shè)的限制,使用MVA建立Sphinx的屬性,用來(lái)存放每個(gè)產(chǎn)品的index_id和category_id,很方便就能實(shí)現(xiàn)篩選功能。第二部分-索引結(jié)構(gòu)配置:Sphi
3、nx配置文件貼出主要部分,其他的手冊(cè)上說(shuō)的很清楚了(手冊(cè)非常重要:)。上面是source部分,項(xiàng)目的編碼是UTF-8,所以首先得執(zhí)行:“SET NAMES utf8”。product里面的price是以保留兩位小數(shù)的形式存放的,在sql_query里面,將它乘以100換成整數(shù),避免浮點(diǎn)精度帶來(lái)的不必要的小數(shù)位。關(guān)鍵的兩條“sql_attr_multi”,配置了屬性和分類的MVA,“from query”后面緊接著SQL,表示來(lái)自查詢,product_id放第一個(gè)字段,后面跟著值字段,這樣Sphinx內(nèi)部才會(huì)進(jìn)行處理。建立索引后,結(jié)構(gòu)可以看成下圖所示:第三部分-查詢:Sphinx自帶的PHP的A
4、PI進(jìn)行查詢。示例1:編號(hào)為1,2,3,4,5的5個(gè)分類下的產(chǎn)品列表:1. $Sphinx->SetFilter( category_id, array(1,2,3,4,5) );2. $Sphinx->Query( ”, *' );示例2:屬性編號(hào)為1,2,3,4,5的下的產(chǎn)品列表(屬性的交集)1. $Sphinx->SetFilter( index_id, array(1) );2. $Sphinx->SetFilter( index_id, arr
5、ay(2) );3. $Sphinx->SetFilter( index_id, array(3) );4. $Sphinx->SetFilter( index_id, array(4) );5. $Sphinx->SetFilter( index_id, array(5) );6. $Sphinx->Query( ”, *' );示例3:屬性編號(hào)為1,2,3,4,5的下的產(chǎn)品列表(屬性的交集)的價(jià)格分組,并且升序排列1. $Sphi
6、nx->SetFilter( index_id, array(1) );2. $Sphinx->SetFilter( index_id, array(2) );3. $Sphinx->SetFilter( index_id, array(3) );4. $Sphinx->SetFilter( index_id, array(4) );5. $Sphinx->SetFilter( index_id, array(5)
7、);6. $Sphinx->SetGroupBy( price, SPH_GROUPBY_ATTR, group asc );7. $Sphinx->Query( ”, *' );示例4:屬性編號(hào)為1,2,3,4,5的下的產(chǎn)品列表(屬性的交集),分類編號(hào)是7,8,91. $Sphinx->SetFilter( category_id, array(7,8,9) );2. $Sphinx->SetFilter( index_id, array(1
8、) );3. $Sphinx->SetFilter( index_id, array(2) );4. $Sphinx->SetFilter( index_id, array(3) );5. $Sphinx->SetFilter( index_id, array(4) );6. $Sphinx->SetFilter( index_id, array(5) );7. $Sphinx->SetGroupBy( price,
9、;SPH_GROUPBY_ATTR, group asc );8. $Sphinx->Query( ”, *' );Sphinx的查詢使用還是很方便的,需要注意的是,Filter傳遞的待篩選參數(shù)必須是數(shù)組;關(guān)于MVA的使用,如果數(shù)組有多個(gè)成員:1. $Sphinx->SetFilter( category_id, array(7,8,9) );表示索引中的category_id滿足數(shù)組中的任意一個(gè)值就會(huì)篩選出來(lái).1. $Sphinx->SetFilter( index_id,
10、160;array(7) );2. $Sphinx->SetFilter( index_id, array(8) );3. $Sphinx->SetFilter( index_id, array(9) );表示索引中的index_id包含7,8,9三個(gè)值才會(huì)被篩選出.MVA也可以用來(lái)進(jìn)行Group操作:$Sphinx->SetGroupBy( index_value_id, SPH_GROUPBY_ATTR );可以很方便的得出當(dāng)前條件下的,各種屬性(樣式,品牌)的數(shù)量.第四部分-即時(shí)更新方案:使用了Sph
11、inx代替了Mysql進(jìn)行查詢后,最大的問(wèn)題還在于數(shù)據(jù)的更新問(wèn)題:我們?cè)诤笈_(tái)進(jìn)行了產(chǎn)品的編輯,刪除,添加操作,都需要盡快的反應(yīng)到用戶端.架構(gòu)圖:說(shuō)明:(1).在Mysql中建立一個(gè)增量表,凡是產(chǎn)品更新操作(添加,修改,刪除),都會(huì)將相關(guān)ID更新到到增量表;表結(jié)構(gòu)很簡(jiǎn)單,只記錄ID.(2).修改Sphinx的配置文件1. sql_query = SELECT id, name, price*100 AS price, 0 AS in_update FROM shop_product2. sql_attr_u
12、int = in_update增加了一個(gè)字段in_update,用來(lái)標(biāo)記主索引的這條記錄,是否在增量表中.(3).產(chǎn)品的更新操作時(shí),除了更新增量表,同時(shí)也利用Sphinx API的UpdateAttributes方法,將主索引中的相關(guān)記錄的in_update屬性設(shè)置成”11. $this->Sphinx->UpdateAttributes( $index, array( in_update ), array( $id => 1 ) );代碼中的$id指的是商
13、品編號(hào).更新完了屬性后,發(fā)出增量索引更新通知,可以是寫隊(duì)列,寫文件等方式.(4).在查詢時(shí),增加過(guò)濾器.1. $Sphinx->SetFilter( in_update, array(0) );這樣,就不會(huì)使用到主索引中的處于增量索引中的doc,以免搜索到錯(cuò)誤的編輯前的數(shù)據(jù).(5).守護(hù)進(jìn)程接到增量索引更新通知,重建增量索引.(6).每天某時(shí)段更新主索引,清空增量表,清空增量索引思路就是這樣,下面的增量索引更新腳本是我用在測(cè)試環(huán)境的,生產(chǎn)環(huán)境的比較復(fù)雜,供參考.1. #!/bin/bash2. CHECK_/xxx/sphinx-check.txt3. SP
14、HINX_COMMAND=”/opt/sphinx/bin/indexer config /opt/sphinx/etc/product.conf product_update_index rotate”4. while true5. do6. NOW_TIME=date +%Y-%m-%d %H:%M:%S7. if -f $CHECK_ then8. WORD_NUM=cat $CHECK_ |wc -w9. if $WORD
15、_NUM -gt 0 then10. echo ”bulid $NOW_TIME”11. $SPHINX_COMMAND12. > $CHECK_13. else14. echo ”skip $NOW_TIME”15. fi16. else17. echo ”nofile $NOW_TIME”18. fi19. sleep 3020. done后臺(tái)操作時(shí),簡(jiǎn)單的用寫文件的方式通知索引更新腳本,索引更新完成后,將文件重置.第五部分-優(yōu)化總結(jié):這幾篇blog,沒(méi)想過(guò)寫成手把手的教程,只是想把思路寫出來(lái),和大家交流,所以流水賬了代碼都是些關(guān)鍵片
溫馨提示
- 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024至2030年中國(guó)鐵籠行業(yè)投資前景及策略咨詢研究報(bào)告
- 2024至2030年中國(guó)渦流型鼓風(fēng)機(jī)行業(yè)投資前景及策略咨詢研究報(bào)告
- 2024至2030年預(yù)制構(gòu)件項(xiàng)目投資價(jià)值分析報(bào)告
- 2024至2030年汽車中央控制門鎖項(xiàng)目投資價(jià)值分析報(bào)告
- 2024年香皂精制機(jī)項(xiàng)目可行性研究報(bào)告
- 全國(guó)青島版信息技術(shù)八年級(jí)下冊(cè)第2單元第1課《大熊貓的兩個(gè)愿望》說(shuō)課稿
- 塑料繞絲機(jī)市場(chǎng)需求與消費(fèi)特點(diǎn)分析
- 安娜卡列尼娜讀后感50
- 帆板市場(chǎng)需求與消費(fèi)特點(diǎn)分析
- Unit 1 Meeting New Friends(說(shuō)課稿)-2024-2025學(xué)年閩教版英語(yǔ)五年級(jí)上冊(cè)
- 工廠改造施工方案
- 初中英語(yǔ)新課程標(biāo)準(zhǔn)詞匯表
- 《春節(jié)的文化與習(xí)俗》課件
- 手機(jī)棋牌平臺(tái)網(wǎng)絡(luò)游戲商業(yè)計(jì)劃書
- 學(xué)校體育與社區(qū)體育融合發(fā)展的研究
- 醫(yī)療機(jī)構(gòu)高警示藥品風(fēng)險(xiǎn)管理規(guī)范(2023版)
- 一年級(jí)體質(zhì)健康數(shù)據(jù)
- 八年級(jí)物理(上)期中考試分析與教學(xué)反思
- 國(guó)家開放大學(xué)《財(cái)政與金融(農(nóng))》形考任務(wù)1-4參考答案
- 2023銀行網(wǎng)點(diǎn)年度工作總結(jié)
- 工廠反騷擾虐待強(qiáng)迫歧視政策
評(píng)論
0/150
提交評(píng)論