版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
Xapian簡介陳光(chenguang@)信息與通信工程學(xué)院網(wǎng)絡(luò)搜索引擎原理本地存儲了大量文本數(shù)據(jù)(本地或采集)需要獨立的搜索引擎不僅僅是全文索引需要數(shù)據(jù)庫的各種復(fù)雜搜索高性能多條件排序統(tǒng)計支持多值字段查詢比如tag典型應(yīng)用場景繼續(xù)用數(shù)據(jù)庫本身索引lucenesolrXapianSphinxSearch產(chǎn)品的選擇典型——Mysqlfulltext索引性能不佳、功能不強多值屬性(比如tag)很難做索引每次查詢的時候,只能利用一個索引組合查詢,需要建立很多多列索引太多索引導(dǎo)致索引膨脹,性能降低數(shù)據(jù)庫自身索引Java開發(fā)的老牌搜索引擎和服務(wù)可移植性較好,適合JAVA原生開發(fā)Lucene相對XapianLucene的可擴展性不強(略)對大數(shù)據(jù)量的支持需要深入調(diào)校(專業(yè)性)性能一般(傳Sphnix要快2-4倍)Lucene/Solr使用C++開發(fā)del.icio.us(1億書簽)Gmane(9千萬條消息)Douban類搜索引擎的簡單服務(wù)Xapian非常好5億網(wǎng)頁,1.5T數(shù)據(jù)庫文件小于1SGmane:9千萬郵件,單服務(wù)器Xapianperformancesphinx
最大:
論壇搜索引擎,20億份文檔(50億?),2TB(6TB?)
最忙:,
免費的分類廣告站點(美國的top10),每天5千萬請求
各種復(fù)雜的應(yīng)用Xapian25年歷史C++嵌入式寫慢但讀很快無統(tǒng)計功能利用磁盤存儲結(jié)構(gòu)適合構(gòu)建搜索引擎
Sphinx起步2003年C++服務(wù)器和mysql整合好提供SQLAPI索引推薦在內(nèi)存中適合更復(fù)雜應(yīng)用Xapianvs.Sphinx針對具體應(yīng)用:靈活or速度?獨立or整合?Sphinx索引建立靠配置文件Sphinx的attribute全部在內(nèi)存里面,不靈活Xapian更簡單可控嵌入式,不需啟動服務(wù)代碼量不大總體結(jié)構(gòu)比較簡單WhyXapian?搜索服務(wù)索引數(shù)據(jù)庫索引Index搜索Search關(guān)系數(shù)據(jù)庫文件NoSQL數(shù)據(jù)庫Web應(yīng)用各種數(shù)據(jù)源異步、實時BasisofXapianRankedprobabilisticsearch——重要詞匯Relevancefeedback——相關(guān)的文檔PhraseandproximitysearchingFullrangeofstructuredbooleansearchoperators("stockNOTmarket",etc)stemmingofsearchterms——近似詞Wildcard——任意匹配(xap*)Synonyms——同義詞Facetsearch——分面搜索Xapian特性Document,documentid:一個整數(shù)沒有字段!terms
帶位置信息的詞或者短語,文本搜索values
短的字符串,用于二進制范圍搜索和排序documentdata
用于返回顯示的任何數(shù)據(jù),不能搜索Xapian術(shù)語首先在Terms里面找documents限定范圍查相應(yīng)的value,進行排序。如果數(shù)據(jù)量大,這個過程可能比較慢。如需要,把data取出,顯示完整內(nèi)容盡量減少第一步的搜索結(jié)果量另外,Sphinx也是這個原理。只是為了提高性能,把value全部放入內(nèi)存了。必需Postinglisttable——每個term包含的documentsRecordtable——document關(guān)聯(lián)的documentdataTermlisttable——每個document包括的所有term可選positionlisttable——每個term出現(xiàn)的位置valuetable
——主要用于保存、排序等Spellingtable——拼寫糾正synonymtable——同義字典XapianDatabaseflint:1.0——以塊的形式來存儲,默認每塊是8K,理論上每一個文件最大可以達到2048GBchert:1.2數(shù)據(jù)庫更小,但搜索更快
Brass:更好的支持replication(開發(fā)中)Remote:遠端的數(shù)據(jù)庫Xapian-backend存儲格式Xapian:SWIG(SimplifiedWrapperandInterfaceGenerator)自動生成的接口
底層,功能強,但使用不方便Xappy:高層的封裝對多字段場景,使用更簡單太自動化,不靈活不是很成熟,跟不上xapian的變化理解原理即可,不推薦使用Xapian的python接口Importxapiandatabase=xapian.WritableDatabase('test/',xapian.DB_CREATE_OR_OPEN)#創(chuàng)建文檔對象并修改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ù)庫database.add_document(doc)mit()Xapian
sample——建立索引Commit保證修改的原子性Atomic大量數(shù)據(jù)逐一寫入commit會很慢解決方法批量添加,成批commitCommit之前只是內(nèi)存操作hack代碼,不做完整性檢查多機分區(qū)索引,事后合并Xapian-compact--multipassXapian寫入速度不可以并行修改!單寫多讀與SQLite一樣,嵌入式的通病會導(dǎo)致數(shù)據(jù)庫崩潰!xapian的lock機制有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直接簡便!qp=xapian.QueryParser()qp.set_database(database)query=qp.parse_query(query_string)使用QueryParser相關(guān)性:enquire.set_sort_by_relevance()默認是按Rank算法計算BM25可使用BoolWeight,采用進索引順序,快速配合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)部只有一個索引使用前綴解決Xappy采用固定2個字母做字段前綴例如:Title:2012->TT2012Xapian多索引字段讀寫不沖突支持有限版本的MVCC(多版本并發(fā)控制)如果寫過于頻繁,就出現(xiàn)讀失效(需要reopen)可以對數(shù)據(jù)庫rebuild提升讀性能Xapian搜索沒有特殊的緩存控制全靠操作系統(tǒng)對硬盤讀寫的緩存Xapian緩存提速索引數(shù)據(jù)量太大,如何可擴展?更新慢搜索慢伸縮性小按不同維度分拆成多個索引按照不同欄目不同的類型的數(shù)據(jù)輕松支持多庫搜索Add_databaseXapian分庫查詢索引數(shù)據(jù)庫位于遠端的服務(wù)器直接打開遠端的數(shù)據(jù)庫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ù)庫,拷貝數(shù)據(jù)庫使用支持快照的文件系統(tǒng)
(LVM-LogicalVolumeManager)無法增量備份Xapian備份Xapian會有很多預(yù)留空間,便于快速修改可使用xapian-compact工具進行壓縮數(shù)據(jù)庫變小搜索會更快但修改會變慢僅僅在很少修改的時候做這個Xapian數(shù)據(jù)壓縮直接支持!Xapian
Replication搜索速度快,支持大數(shù)據(jù)量強大的全文搜索內(nèi)存占用少嵌入式,簡單支持“實時”索引Xapian優(yōu)點不能統(tǒng)計:Sum/Group文檔資料不夠豐富開發(fā)維護人員少Value必須為字符串,更占用存儲空間Xapian問題簡捷之美整體設(shè)計精巧多方面因素做到了平衡Xapian總結(jié)兩種方式調(diào)用分詞(ICTCLAS等)API,將分詞結(jié)果使用Xapian接口建索引Hacking
QueryParser典型代表:Xunsearch(/)Xapian中文支持高性能、多功能的全文檢索解決方案后端采用C/C++開發(fā)多線程服務(wù)端,索引設(shè)計基于Xapian和scws中文分詞前端是使用腳本語言編寫的開發(fā)工具(SDK),目前支持PHP語言除支持基礎(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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 采購合同的供應(yīng)鏈環(huán)境管理3篇
- 采購模板合作方合同3篇
- 采購合同長期合規(guī)3篇
- 采購合同管理理論與實務(wù)相結(jié)合3篇
- 2024年度建筑工程施工特種作業(yè)合同3篇
- 采購合同評審表評分表3篇
- 采購合同中的暫停與終止條款3篇
- 采購合同中的工程材料價格變動風(fēng)險3篇
- 采購合同的審計要求3篇
- 采購合同流程臺帳3篇
- 血液系統(tǒng)疾病病人常見癥狀體征護理
- [北京]輸變電工程標準工藝應(yīng)用圖冊(圖文并茂)
- 海域使用分類體系(全)
- 魯教版必修一第二單元第二節(jié)大氣運動——熱力環(huán)流(共28張PPT)
- 解除限制消費申請書
- 預(yù)制箱梁常見問題以及處理方案
- 《建筑施工現(xiàn)場環(huán)境與衛(wèi)生標準》(JGJ146)
- 安徽省中小型水利工程施工監(jiān)理導(dǎo)則
- 標準鋼號和中國鋼號對照表.doc
- 汽車整車廠和動力總成廠房火災(zāi)危險性分類
- 7實用衛(wèi)生統(tǒng)計學(xué)總-國家開放大學(xué)2022年1月期末考試復(fù)習(xí)資料-護理本復(fù)習(xí)資料
評論
0/150
提交評論