安徽新华电脑专修学院_安徽电脑培训_安徽电脑培训学校_合肥电脑培训

當前位置:首頁 > 網站舊欄目 > 學習園地 > 設計軟件教程 > Lucene Hack之通過縮小搜索結果集來提升性能 (1)

Lucene Hack之通過縮小搜索結果集來提升性能 (1)
2010-01-13 23:05:21  作者:  來源:
一、緣起
Lucene在索引文件上G之后的搜索性能下降很嚴重,隨便跑個搜索就要上0.x秒。如果是單線程搜索那么性能尚可,總可以在0.x秒返回結果,如果是Web式的多線程訪問,由于Lucene的內部機制導致數據被大量載入內存,用完后立即丟棄,隨之引起JVM頻繁GC,性能極其低下,1-10秒的長連接比比皆是。這也是世人為之詬病的Lucene應用瓶頸問題,那么是否有解決方法呢?

二、思路
我們來觀察Google, Baidu的搜索,有一個總體的感覺就是搜索結果多的關鍵詞耗時比較少,結果少的關鍵詞耗時反而多,且結果多的時候會說“約******個結果”。隱士猜測Google, Baidu的算法是找到前n個結果后停止掃描索引,根據前n個結果來推斷總共有多少個結果,此猜想可由Google, Baidu翻頁限制而得到部分驗證。
再看Lucene,其Hits.length()返回的總是精確的結果,如果可以讓Lucene也返回模糊的結果,那么索引文件就算是10G也可以輕松應對了。

三、探索
隱士帶著這個問題訪名山、覓高人,可惜沒有找到前人的成果,可能是隱士走的路不夠勤,如有類似的解決方案,隱士不吝賜教。
無奈之下,隱士詳細研究了Lucene 2.1.0源碼,準備重新發明輪子。
一般來說大多數搜索應用中的Query都會落在BooleanQuery上,隱士就拿它開刀。一路看來,BooleanScorer2里的一個method吸引了隱士,代碼如下:

Java代碼 復制代碼
  1. public void score(HitCollector hc) throws IOException {   
  2.   if (countingSumScorer == null) {   
  3.     initCountingSumScorer();   
  4.   }   
  5.   while (countingSumScorer.next()) {   
  6.     hc.collect(countingSumScorer.doc(), score());   
  7.   }   
  8. }  


在while循環里嵌入寫日志代碼可證結果集有多大,此處就循環了多少次。countingSumScorer.next()的意思是找到下一個符合boolean規則的document,找到后放入HitCollector,這HitCollector后面會換個馬甲放在大家熟悉的Hits里面。
如果可以在這個while循環里嵌一個break,到一定數量就break出來,性能提升將相當明顯。這個代碼相當簡單,果然大幅提高了性能,帶來的副作用是結果不太準,這個可以通過調整業務模型、邏輯來修正。畢竟這是一條提升Lucene性能的有效方法。
細細想來,正是由于這個break會導致結果集大的關鍵詞提前出來,搜索時間少,結果集小的關鍵詞不可避免會走完整個索引,相應的搜索時間會長一點。

四、效果
由于具體嵌入代碼的過程極其繁瑣,隱士將在第二回詳細講解。這第一回先來個Big picture。
歷盡千辛萬苦,隱士終于搞定了這套程序,效果可以從隱士做的視頻搜索http://so.mdbchina.com/video/%E7%BE%8E%E5%A5%B3看出。
這個關鍵詞“美女”可以找到18萬個視頻,平均0.5秒返回結果,現在用上了新算法,只要0.06x秒返回結果,而且返回結果足夠好了,估算的8.5萬個結果雖然離18萬有很大差距,不過由于是估算的,差2-3倍應屬可以接受的。
由算法的特性可知,while里面的hc.collect總可以在常量時間內完成,循環次數又是<=常量,該算法的時間復雜度只和BooleanQuery的復雜程度相關,和索引文件大小以及命中的Document在索引文件內的分布密度沒有關系,因為BooleanQuery的復雜程度決定了countingSumScorer.next()需要經過多少次判斷、多少次讀取索引文件,countingSumScorer.next()正是整個算法中耗時不定的部分。
現在這個視頻搜索的索引文件接近3G,熱門關鍵詞可以在0.0x秒返回結果,隱士相信即使以后索引文件上到10G,依然可以在0.0x秒返回結果。

(注:這個視頻搜索實際使用效果會打折扣,因為后臺索引也在這臺機器上,以后會分服務器,現在暫時在一起。)

安徽新華電腦學校專業職業規劃師為你提供更多幫助【在線咨詢
主站蜘蛛池模板: 耐磨焊丝厂-堆焊焊材研发-修复工程-天津舜荣焊材官网 | 上饶环亚电脑会计培训学校--电脑学校|上饶电脑学校|上饶电脑培训|会计培训|上饶会计培训|上饶县会计培训|广丰会计培训|玉山会计培训|横峰会计培训|上饶网店培训 上进电缆(嘉兴)股份有限公司官网 - 光伏电缆|防火电缆|电力电缆|铝合金电缆专业生产厂家 | 医盟网-全国首家医疗信息化行业门户网站| 塞伯罗斯官网|二维码门禁|景区验票主板|扫码门禁|扫码开门厂家 | 沈阳资质代办_代办建筑资质「快」-【华廷元】沈阳代办公司首页- 沈阳机电一体化电热锅炉_沈阳蓄热式电锅炉_沈阳壁挂式电锅炉【沈阳远鹏电热供水设备工程安装有限公司】 | 人工气候-智能-低温生化培养箱厂家|价格-上海予卓仪器 | 宁波刑事辩护律师-建设工程律师-工程款合同律师-喻明辉律师 | 抛丸机-通过式抛丸机-履带吊钩式抛丸机厂家-青岛泓霖智能设备公司 | 天津网站制作|网站建设|营销型网站建设|筑美网络---天津做网站公司 | 腻子粉厂家_耐水腻子粉_内墙腻子粉批发_生态腻子粉_长沙美恩生态腻子粉厂家 | 全国重点实验室--人民网 | 视频制作_产品宣传片拍摄_二维动画制作公司-深圳火牛传媒 | 进销存软件|仓库管理软件|库存物资出入库|ERP生产|MRP|易特软件官方网站 | 久久91精品久久91综合_国产亚洲自拍一区_国产精品第1页_亚洲高清视频一区_91成人午夜在线精品_亚洲国产精品网站在线播放_亚洲国产成人久久综合区_国产精品亚洲专区在线观看_免费视频精品一区二区三区 | 圆锯机-滚牙机-滚丝轮-滚丝机-滚牙轮-切断机-东莞市溪远泰五金机械有限公司 | 塑料检查井_双扣聚氯乙烯增强管_双壁波纹管-河南中盈塑料制品有限公司 | 卧式镗铣床,道斯镗铣机床加工中心-江苏道斯数控科技有限公司 | 老照片修复,修复老照片,老旧照片翻新-老照片修复网 | 全不锈钢拉钉|铁开口拉钉|全铝封闭拉钉厂家-凯仕特官网 | 激光切割加工,佛山激光切割加工,钣金加工,机加工-佛山市华锐达金属制品有限公司 | 鹰潭代理记账公司_鹰潭代理记账_鹰潭注册公司-鹰潭市新知会计服务有限公司 | 希希助培是专业的教育信息化全场景服务商,为教育培训机构提供教务管理、招生营销、财务管理、家校互动等 | 天津实验室纯水机-GMP认证制药纯化水设备-天津开发区瑞尔环保科技有限公司 | 上海鑫迪机械有限公司 上海科蜀智能机械有限公司 | 铁行火车票_铁行火车票网上订票_铁行火车票客户端【铁行官网】 | 无尘投料站-真空上料机-旋振筛|超声波振动筛|摇摆筛|筛分机-新乡市欧霖佳机械有限公司 | 湖南长沙癫痫病医院_湖南癫痫病专科医院_湖南治疗癫痫病专业医院_长沙和谐医院有限公司 | 吉林省创智汇成包装有限公司,长春高档礼盒,长春包装盒厂家,长春精品包装盒 | 雨量计,翻斗雨量计,声波雨量计i,时差法流量计,时差法明渠流量计 - 徐州伟思水务科技有限公司 | 亿企商贸-亿万企业的商务贸易平台-B2B企业产品发布供求信息平台,一带一路中国企业及产品展示平台,免费企业智能自助建站网络营销推广平台,打造B2B企业黄页产品信息发布推广专业综合电子商务平台! | 生活污水处理设备-地埋式污水处理设备厂家-山东梦之洁水处理设备有限公司 | 萍乡市德一防水工程有限公司| 中科联航(江苏)-信息化监理|信息化咨询|信息系统项目管理|信息系统工程监理公司 | 金蝶软件_金蝶湖南公司_长沙金蝶软件_精斗云软件_财务软件_进销存软件_云ERP软件_金蝶软件销售电话 | 四字成语大全6000个,经典成语大全及解释,1000个50000个成语及解释 - 同鑫成语网 | 浏阳企业网站建设|设计|制作,专业做网站,建站公司-冠讯网络公司 领先的一站式_专利申请代理知识产权服务平台_乐知网 | 医疗器械,理化实验室设备,微生物,培养基,一站式采购 - 杭州润泽仪器商城 | 截止阀,电动,气动,手动,化工截止阀-上海申弘阀门有限公司 | 耀美软瓷施工队-13638350103-专注于软瓷施工勾缝的贴软瓷施工队 - 软瓷,软瓷施工,软瓷勾缝,软瓷怎么施工,软瓷怎么勾缝,贴软瓷,软瓷施工队 | 苏州新闻网_苏州最权威资讯| 激光切管机_等离子切管机_相贯线切管机厂家|服务为先-山东美峰智能设备有限公司 |