下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、研究了coreseek下的sphinx 配置及api調(diào)用,收獲頗多。前言: 之前向來(lái)用法lucene,有無(wú)數(shù)優(yōu)點(diǎn)及缺點(diǎn),最大的缺點(diǎn)就是要維護(hù)一個(gè)索引的成本很高,需要牽扯到無(wú)數(shù)方面,其中也包含業(yè)務(wù)方面;優(yōu)點(diǎn)呢,不用多說了,速度快,支持查詢的模式多,各種條件下的查詢都能實(shí)現(xiàn),所以想找一個(gè)越發(fā)符合現(xiàn)有應(yīng)用情況的搜尋引擎,故想到了coreseek=(sphinx 中文分詞 框架) sphinx 最大的益處是業(yè)務(wù)層面不需要你去關(guān)懷索引的建立、更新等,后臺(tái)定時(shí)去維護(hù)主索引和增量索引即可。同時(shí)有無(wú)數(shù)人性化的功能,比如防止建立索引時(shí)全表讀取造成數(shù)據(jù)庫(kù)掛掉,而舉行的分批讀取。增量索引方面可以讀取一段時(shí)光內(nèi)更新的
2、數(shù)據(jù),對(duì)于一個(gè)網(wǎng)站網(wǎng)站來(lái)說,更新的量占全部的數(shù)據(jù)的量比較小。增量索引適合短時(shí)光內(nèi)更新,主索引適合長(zhǎng)時(shí)光內(nèi)更新。讀取索引的時(shí)候同時(shí)讀取這2個(gè)索引。 sphinxex引擎,這個(gè)個(gè)人覺得只適合終端查看些數(shù)據(jù),做調(diào)試相關(guān)的,線上用法還是得用他的api,支持n種語(yǔ)言了,今日測(cè)試的是java接口,感覺還不錯(cuò),不過也找到一些小缺點(diǎn),少float類型的filter?。ㄓ胒loat_range也還可以), 少int類型的屬性,不明了sing類型的為啥沒寫出來(lái)。 和lucene比較除了上述的外,好的功能有:支持一對(duì)多的搜尋,sql_attr_mult 這個(gè)很有用,比如 我要找到公交車站叫a的旁邊的房子,一個(gè)房子對(duì)
3、應(yīng)著好幾個(gè)公交車站a,b,c,d等等的,很有用,杠杠的!呵呵。竟然還有地理坐標(biāo)的查詢功能,正巧符合我們的業(yè)務(wù),查詢 房子周圍100米以內(nèi)的東西之類。 正文: 以下是實(shí)際用法的配置參數(shù)及功能,有寫的不對(duì)的還請(qǐng)指正。 1、官方和網(wǎng)上現(xiàn)有的增量索引方式都僅僅為自增的主鍵增強(qiáng)了多少,而并不包括之前的數(shù)據(jù)更新,按照這個(gè)情況,可以用法mysql里面的一個(gè)特別字段的功能:創(chuàng)建一個(gè)字段: last_upd_ timestamp not null default current_timestamp on update current_timestamp, 即只要該行有數(shù)據(jù)變更,這個(gè)字段的 即變成最新的時(shí)光,同時(shí)
4、增強(qiáng)記錄表,記錄主索引索引的最后時(shí)光。 create table sph_counter ( counter_ int(11) not null, max_doc_id int(11) not null, primary key (counter_id) ) engine=innodb default charset=utf8 collate=utf8_bin 然后呢,就是在sphinx配置文件里寫上相關(guān)的sql了。 source tasks type = mysql sql_host = 192.168.0.21 sql_user = root sql_pass = cjkjb110 sql
5、_db = design sql_port = 3306 sql_query_pre = set names utf8 sql_query_pre = set session query_cache_type=off sql_query_pre = replace into sph_counter select 1, unix_timestamp(max(last_updat_time) from tasks sql_query = select id,task_no as taskno,title,title as title1,reward,us,room,hall,wei,area,to
6、tal_budget as totalbudget,district,city,provie,unix_timestamp(created) as created_time,decoration_style_id,unix_timestamp(last_updated_time) as last_updated_time from tasks where last_updated_time = (select from_unixtime(max_doc_id) from sph_counter where counter_id=1) sql_attr_float = reward sql_at
7、tr_uint = status sql_attr_uint = room sql_attr_bigint = hall sql_attr_bigint = wei sql_attr_float = area sql_attr_float = totalbudget sql_attr_uint = district sql_attr_uint = city sql_attr_uint = province sql_attr_uint = created_time sql_attr_uint = last_updated_time sql_attr_bigint =taskno sql_attr
8、_string =title sql_attr_multi =uint decoration_style_id from field; sql_query_info_pre = set names utf8 行查詢時(shí),設(shè)置正確的字符集 sql_query_info = select * from tasks where id=$id 指令行查詢時(shí),從數(shù)據(jù)庫(kù)讀取原始數(shù)據(jù)信息 source tasks_delta : tasks sql_query_pre =set names utf8 sql_query = select id,task_no as taskno,title,title as
9、title1,reward,status,room,hall,wei,area,total_budget as totalbudget,district,city,province,unix_timestamp(created) as created_time,decoration_style_id,unix_timestamp(last_updated_time) as last_updated_time from tasks where last_updated_time (select from_unixtime(max_doc_id) from sph_counter where co
10、unter_id=1) 上面定義了主索引:tasks,增量索引tasks_delta 主索引里sql_query_pre 里插入了最新的last_update_time字段,執(zhí)行主索引的時(shí)候該語(yǔ)句就能執(zhí)行了,執(zhí)行增量索引的時(shí)候推斷的條件即是大于這個(gè)主索引的最后更新時(shí)光,這樣的話就能獵取到更新和添加的最新數(shù)據(jù)了。有一個(gè)缺點(diǎn)就是不能找到記錄刪除數(shù)據(jù),我們的解決辦法是用法規(guī)律刪除即增強(qiáng)一個(gè)is_delete字段來(lái)推斷是否是刪除。 2、搜尋1對(duì)多的狀況,打個(gè)比喻,數(shù)據(jù)庫(kù)中有n個(gè)文章的數(shù)據(jù),每個(gè)文章對(duì)應(yīng)有n個(gè)標(biāo)簽,若是要求搜尋標(biāo)簽得到m個(gè)文章的時(shí)候,一般的查詢就有困難了,之前的辦法也就是把多個(gè)標(biāo)簽放在同
11、一個(gè)字段中,用逗號(hào)隔開之類,用法like查詢等,或者用法聯(lián)合查詢,沒有太好的解決計(jì)劃,sphinx里的sql_attr_multi字段就是為了解決這個(gè)問題而建。 上述表中的 sql_attr_multi =uint decoration_style_id from field; 該行就用法了這個(gè)辦法,詳細(xì)怎樣操作呢? decoration_style_id 字段是tasks表中的其中一個(gè)varchar列,里面記錄了例如12,45,2,89,323之類的數(shù)據(jù),其他什么都不需要配置挺直用法這一行代碼,就能給你自動(dòng)按uint類型分成多行了,搜尋的時(shí)候挺直_filter(decoration_styl
12、e_id,89,fae) 就能搜尋出帶有89這個(gè)的記錄。功能十分有用,在無(wú)數(shù)方面都可以用的上,除了上面用的from field 還可以用法from query,from range_query等,這樣就可以聯(lián)合其他的表舉行索引查詢了。 3、精心的人可能發(fā)覺我寫的sql 中間加了無(wú)數(shù)別號(hào),好多重復(fù)的字段,例如 title,title as title1 ,這樣的寫法是迎合sphinx的功能特點(diǎn)的,下面可以看到sql_attr_string =title 這句是定義一個(gè)屬性 attr,title1字段為field,attr 是在搜尋結(jié)果中可以顯示的,但是不能作為分詞舉行搜尋的,field 是可以作
13、為分詞舉行搜尋查詢的,兩者不能同時(shí)起作用,所以復(fù)制了一列,作不同的辦法用,這是我的方法,不知道有沒有更好的方法,有的話棘手告知我下感謝。 4、說下api,用法的是java ,常用的幾個(gè)語(yǔ)言辦法名和參數(shù)都類 ,貼上幾個(gè)主要的地方: sphinxclient cl =null; searchrelt t sr = null; sphinxresult res=null; int pagesize=6; int pageind=1; cl = new sphinxclient(); cl.setserver ( mons.constants.pubconstant.sphinxserver, 931
14、2 ); cl.setconnecttimeout(2000); cl.setmatchmode(sphinxclient.sph_match_all); if(chk(info.getarea() int a=integer.parseint(info.getarea(); float area_min=0.00f; float area_max=100000.00f; switch(a) case 1: area_min=0.00f; area_max=40.00f; break; case 2: area_min=41.00f; area_max=60.00f; break; case
15、3: area_min=61.00f; area_max=90.00f; break; case 4: area_min=91.00f; area_max=120.00f; break; case 5: area_min=121.00f; area_max=150.00f; break; case 6: area_min=151.00f; area_max=200.00f; break; default: break; cl.setfilterfloatrange( area , area_min, area_max, false); if(chk(info.getpagesize() pag
16、esize=integer.parseint(info.getpagesize(); if(chk(info.getpageindex() pageindex=integer.parseint(info.getpageindex(); cl.setlimits ( (pageindex-1)*pagesize, pagesize ); cl.setsortmode(sphinxclient.sph_sort_attr_desc, last_updated_time /根據(jù)字段排序 string q= if(info.getkeywords()!=null) q=info.getkeywords(); string index= * if(chk(info.gettypename() if(info.gettypename().equals(searchconstant.task) index= tasks,tasks_delta else if(info.gettypename().equals(searchconstant.case) index= cases,cases_delta res = cl.query(q,
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025無(wú)固定期限的勞動(dòng)合同范本
- 美容美發(fā)教育兼職教師合同模板
- 2025年外墻裝飾施工合作合同參考范本2篇
- 電影院電影票租賃合同范本
- 2025年度消防器材銷售與安裝服務(wù)合同范本3篇
- 飛行員招聘合同駕駛員
- 2025年度最簡(jiǎn)化版化妝品銷售代理合同范本6篇
- 2025年度水電暖設(shè)施維護(hù)保養(yǎng)及應(yīng)急搶修承包合同3篇
- 2025年度民間借貸利息擔(dān)保與反擔(dān)保合同2篇
- 2025年度消防安全應(yīng)急預(yù)案編制與演練服務(wù)合同2篇
- 2024至2030年中國(guó)購(gòu)物商場(chǎng)行業(yè)市場(chǎng)深度調(diào)查與投資發(fā)展研究報(bào)告
- 七年級(jí)上冊(cè)道德與法治第1-4單元共4個(gè)單元復(fù)習(xí)教學(xué)設(shè)計(jì)
- SY-T 5412-2023 下套管作業(yè)規(guī)程
- 四色安全風(fēng)險(xiǎn)空間分布圖設(shè)計(jì)原則和要求
- 八年級(jí)化學(xué)下冊(cè)期末試卷及答案【完整版】
- 合伙人散伙分家協(xié)議書范文
- 紅色旅游智慧樹知到期末考試答案章節(jié)答案2024年南昌大學(xué)
- CBT3780-1997 管子吊架行業(yè)標(biāo)準(zhǔn)
- 2024年遼寧裝備制造職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性測(cè)試題庫(kù)帶答案
- (正式版)JTT 1497-2024 公路橋梁塔柱施工平臺(tái)及通道安全技術(shù)要求
- 江西省南昌市東湖區(qū)2023-2024學(xué)年三年級(jí)上學(xué)期期末語(yǔ)文試卷
評(píng)論
0/150
提交評(píng)論