版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
Xapian簡(jiǎn)介陳光(chenguang@)信息與通信工程學(xué)院網(wǎng)絡(luò)搜索引擎原理本地存儲(chǔ)了大量文本數(shù)據(jù)(本地或采集)需要獨(dú)立的搜索引擎不僅僅是全文索引需要數(shù)據(jù)庫(kù)的各種復(fù)雜搜索高性能多條件排序統(tǒng)計(jì)支持多值字段查詢比如tag典型應(yīng)用場(chǎng)景繼續(xù)用數(shù)據(jù)庫(kù)本身索引lucenesolrXapianSphinxSearch產(chǎn)品的選擇典型——Mysqlfulltext索引性能不佳、功能不強(qiáng)多值屬性(比如tag)很難做索引每次查詢的時(shí)候,只能利用一個(gè)索引組合查詢,需要建立很多多列索引太多索引導(dǎo)致索引膨脹,性能降低數(shù)據(jù)庫(kù)自身索引Java開(kāi)發(fā)的老牌搜索引擎和服務(wù)可移植性較好,適合JAVA原生開(kāi)發(fā)Lucene相對(duì)XapianLucene的可擴(kuò)展性不強(qiáng)(略)對(duì)大數(shù)據(jù)量的支持需要深入調(diào)校(專業(yè)性)性能一般(傳Sphnix要快2-4倍)Lucene/Solr使用C++開(kāi)發(fā)del.icio.us(1億書簽)Gmane(9千萬(wàn)條消息)Douban類搜索引擎的簡(jiǎn)單服務(wù)Xapian非常好5億網(wǎng)頁(yè),1.5T數(shù)據(jù)庫(kù)文件小于1SGmane:9千萬(wàn)郵件,單服務(wù)器Xapianperformancesphinx
最大:
論壇搜索引擎,20億份文檔(50億?),2TB(6TB?)
最忙:,
免費(fèi)的分類廣告站點(diǎn)(美國(guó)的top10),每天5千萬(wàn)請(qǐng)求
各種復(fù)雜的應(yīng)用Xapian25年歷史C++嵌入式寫慢但讀很快無(wú)統(tǒng)計(jì)功能利用磁盤存儲(chǔ)結(jié)構(gòu)適合構(gòu)建搜索引擎
Sphinx起步2003年C++服務(wù)器和mysql整合好提供SQLAPI索引推薦在內(nèi)存中適合更復(fù)雜應(yīng)用Xapianvs.Sphinx針對(duì)具體應(yīng)用:靈活or速度?獨(dú)立or整合?Sphinx索引建立靠配置文件Sphinx的attribute全部在內(nèi)存里面,不靈活Xapian更簡(jiǎn)單可控嵌入式,不需啟動(dòng)服務(wù)代碼量不大總體結(jié)構(gòu)比較簡(jiǎn)單WhyXapian?搜索服務(wù)索引數(shù)據(jù)庫(kù)索引Index搜索Search關(guān)系數(shù)據(jù)庫(kù)文件NoSQL數(shù)據(jù)庫(kù)Web應(yīng)用各種數(shù)據(jù)源異步、實(shí)時(shí)BasisofXapianRankedprobabilisticsearch——重要詞匯Relevancefeedback——相關(guān)的文檔PhraseandproximitysearchingFullrangeofstructuredbooleansearchoperators("stockNOTmarket",etc)stemmingofsearchterms——近似詞Wildcard——任意匹配(xap*)Synonyms——同義詞Facetsearch——分面搜索Xapian特性Document,documentid:一個(gè)整數(shù)沒(méi)有字段!terms
帶位置信息的詞或者短語(yǔ),文本搜索values
短的字符串,用于二進(jìn)制范圍搜索和排序documentdata
用于返回顯示的任何數(shù)據(jù),不能搜索Xapian術(shù)語(yǔ)首先在Terms里面找documents限定范圍查相應(yīng)的value,進(jìn)行排序。如果數(shù)據(jù)量大,這個(gè)過(guò)程可能比較慢。如需要,把data取出,顯示完整內(nèi)容盡量減少第一步的搜索結(jié)果量另外,Sphinx也是這個(gè)原理。只是為了提高性能,把value全部放入內(nèi)存了。必需Postinglisttable——每個(gè)term包含的documentsRecordtable——document關(guān)聯(lián)的documentdataTermlisttable——每個(gè)document包括的所有term可選positionlisttable——每個(gè)term出現(xiàn)的位置valuetable
——主要用于保存、排序等Spellingtable——拼寫糾正synonymtable——同義字典XapianDatabaseflint:1.0——以塊的形式來(lái)存儲(chǔ),默認(rèn)每塊是8K,理論上每一個(gè)文件最大可以達(dá)到2048GBchert:1.2數(shù)據(jù)庫(kù)更小,但搜索更快
Brass:更好的支持replication(開(kāi)發(fā)中)Remote:遠(yuǎn)端的數(shù)據(jù)庫(kù)Xapian-backend存儲(chǔ)格式Xapian:SWIG(SimplifiedWrapperandInterfaceGenerator)自動(dòng)生成的接口
底層,功能強(qiáng),但使用不方便Xappy:高層的封裝對(duì)多字段場(chǎng)景,使用更簡(jiǎn)單太自動(dòng)化,不靈活不是很成熟,跟不上xapian的變化理解原理即可,不推薦使用Xapian的python接口Importxapiandatabase=xapian.WritableDatabase('test/',xapian.DB_CREATE_OR_OPEN)#創(chuàng)建文檔對(duì)象并修改doc=xapian.Document()doc.set_data(“你相信2012預(yù)言嗎?”)doc.add_posting(“你”,1)doc.add_posting(“相信”,2)doc.add_posting(“2012”,4)doc.add_posting(“預(yù)言”,8)doc.add_value(0,“20121221”)doc.add_value(1,“2012”)#添加并寫入數(shù)據(jù)庫(kù)database.add_document(doc)mit()Xapian
sample——建立索引Commit保證修改的原子性Atomic大量數(shù)據(jù)逐一寫入commit會(huì)很慢解決方法批量添加,成批commitCommit之前只是內(nèi)存操作hack代碼,不做完整性檢查多機(jī)分區(qū)索引,事后合并Xapian-compact--multipassXapian寫入速度不可以并行修改!單寫多讀與SQLite一樣,嵌入式的通病會(huì)導(dǎo)致數(shù)據(jù)庫(kù)崩潰!xapian的lock機(jī)制有bug檢查是否崩潰xapian-checkfoo/termlist.DBXapian并行修改importxapiandatabase=xapian.Database('test/')enquire=xapian.Enquire(database)terms=[“2012”,“相信”]query=xapian.Query(xapian.Query.OP_AND,terms)enquire.set_query(query)matches=enquire.get_mset(0,10)count=matches.get_matches_estimated()formatchinmatches:printmatch[xapian.MSET_DID]printmatch[xapian.MSET_PERCENT]printmatch[xapian.MSET_DOCUMENT].get_data()Xapian
sample——搜索xapian.Query(op,query1,query2)OP_ANDOP_OROP_AND_NOTOP_FILTEROP_AND_MAYBEOP_XOROP_NEAROP_PHRASEOP_ELITE_SETXapian組合搜索類Google搜索paassite:–Service直接簡(jiǎn)便!qp=xapian.QueryParser()qp.set_database(database)query=qp.parse_query(query_string)使用QueryParser相關(guān)性:enquire.set_sort_by_relevance()默認(rèn)是按Rank算法計(jì)算BM25可使用BoolWeight,采用進(jìn)索引順序,快速配合enquire.set_docid_order按照其他屬性排序:enquire.set_sort_by_value()
value必須統(tǒng)一為可排序的字符串enquire.set_sort_by_value_then_relevance()enquire.set_sort_by_relevance_then_value()自定義算法地理位置排序圖片相似性排序Xapian排序std::stringXapian::Document::serialise()constSerialisedocumentintoastring.基本形式Wt的確定相關(guān)性R通常有qfi
=1Xapian的BM25(Default:k1=1,k2=1,b=0.5)
BM25排序算法內(nèi)部只有一個(gè)索引使用前綴解決Xappy采用固定2個(gè)字母做字段前綴例如:Title:2012->TT2012Xapian多索引字段讀寫不沖突支持有限版本的MVCC(多版本并發(fā)控制)如果寫過(guò)于頻繁,就出現(xiàn)讀失效(需要reopen)可以對(duì)數(shù)據(jù)庫(kù)rebuild提升讀性能Xapian搜索沒(méi)有特殊的緩存控制全靠操作系統(tǒng)對(duì)硬盤讀寫的緩存Xapian緩存提速索引數(shù)據(jù)量太大,如何可擴(kuò)展?更新慢搜索慢伸縮性小按不同維度分拆成多個(gè)索引按照不同欄目不同的類型的數(shù)據(jù)輕松支持多庫(kù)搜索Add_databaseXapian分庫(kù)查詢索引數(shù)據(jù)庫(kù)位于遠(yuǎn)端的服務(wù)器直接打開(kāi)遠(yuǎn)端的數(shù)據(jù)庫(kù)2種方法ProgXapian.database(Xapian::Remote::open("ssh","xapian-progsrv/var/lib/xapian/data/db1"));服務(wù)器xapian-tcpsrv:
--port
33333Xapian::Databasedatabase(Xapian::Remote::open("searchserver",33333));Xapian分布式搜索采用原始方式停止寫數(shù)據(jù)庫(kù),拷貝數(shù)據(jù)庫(kù)使用支持快照的文件系統(tǒng)
(LVM-LogicalVolumeManager)無(wú)法增量備份Xapian備份Xapian會(huì)有很多預(yù)留空間,便于快速修改可使用xapian-compact工具進(jìn)行壓縮數(shù)據(jù)庫(kù)變小搜索會(huì)更快但修改會(huì)變慢僅僅在很少修改的時(shí)候做這個(gè)Xapian數(shù)據(jù)壓縮直接支持!Xapian
Replication搜索速度快,支持大數(shù)據(jù)量強(qiáng)大的全文搜索內(nèi)存占用少嵌入式,簡(jiǎn)單支持“實(shí)時(shí)”索引Xapian優(yōu)點(diǎn)不能統(tǒng)計(jì):Sum/Group文檔資料不夠豐富開(kāi)發(fā)維護(hù)人員少Value必須為字符串,更占用存儲(chǔ)空間Xapian問(wèn)題簡(jiǎn)捷之美整體設(shè)計(jì)精巧多方面因素做到了平衡Xapian總結(jié)兩種方式調(diào)用分詞(ICTCLAS等)API,將分詞結(jié)果使用Xapian接口建索引Hacking
QueryParser典型代表:Xunsearch(/)Xapian中文支持高性能、多功能的全文檢索解決方案后端采用C/C++開(kāi)發(fā)多線程服務(wù)端,索引設(shè)計(jì)基于Xapian和scws中文分詞前端是使用腳本語(yǔ)言編寫的開(kāi)發(fā)工具(SDK),目前支持PHP語(yǔ)言除支持基礎(chǔ)的自定義分詞、字段檢索、布爾搜索外,還直接支持相關(guān)搜索、拼音搜索、搜索建議等專業(yè)功能Xunsearch=======================|YourSearchApplication|========================/\/\................/||\............/||\....................:||||::+-------------------------------------+::|[PHP]|otherlang|::|---------------------------------------|::|SDK:(xunsearchdevkit)|::+--------------------------------------+::/\::/\::+---------------------++----------------------------+::|Index-server||Search-server|::|-----------------------||------------------------------|::|xs-indexd||xs-searchd|::|xs-import||1*master|::|xs-logging||N*worker(M*thread)|::+----------------------++----------------------------+::
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二氧化碳分析儀項(xiàng)目可行性分析報(bào)告范文
- 咨詢顧問(wèn)公司面試技巧及題目詳解
- 寶武集團(tuán)項(xiàng)目經(jīng)理面試題庫(kù)含答案
- 深度解析(2026)《GBT 18946-2003橡膠涂覆織物 橡膠與織物粘合強(qiáng)度的測(cè)定 直接拉力法》(2026年)深度解析
- 品牌經(jīng)理崗位面試題及市場(chǎng)分析能力含答案
- 供水設(shè)備建設(shè)項(xiàng)目可行性分析報(bào)告(總投資5000萬(wàn)元)
- 石油化工設(shè)備工程師面試要點(diǎn)與答案
- 建筑設(shè)計(jì)師崗位的面試題及答案
- 物資出入庫(kù)自動(dòng)化管理方案
- 珠寶銷售面試題及答案
- 結(jié)構(gòu)加固施工驗(yàn)收方案
- 小班美術(shù)活動(dòng)《漂亮的帽子》課件
- 礦山破碎設(shè)備安全操作規(guī)程
- 暖通工程調(diào)試及試運(yùn)行總結(jié)報(bào)告
- 2024年全國(guó)職業(yè)院校技能大賽ZZ054 智慧物流作業(yè)賽項(xiàng)賽題第2套
- 《藥品質(zhì)量管理體系內(nèi)審員職業(yè)技能規(guī)范》
- 冶煉廠拆遷施工方案
- 谷物烘干機(jī)結(jié)構(gòu)設(shè)計(jì)
- 新疆交通投資責(zé)任有限公司 筆試內(nèi)容
- 檢修安全培訓(xùn)內(nèi)容課件
- 顱內(nèi)感染指南解讀
評(píng)論
0/150
提交評(píng)論