版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
Xapian簡介陳光(chenguang@)信息與通信工程學院網絡搜索引擎原理本地存儲了大量文本數據(本地或采集)需要獨立的搜索引擎不僅僅是全文索引需要數據庫的各種復雜搜索高性能多條件排序統計支持多值字段查詢比如tag典型應用場景繼續用數據庫本身索引lucenesolrXapianSphinxSearch產品的選擇典型——Mysqlfulltext索引性能不佳、功能不強多值屬性(比如tag)很難做索引每次查詢的時候,只能利用一個索引組合查詢,需要建立很多多列索引太多索引導致索引膨脹,性能降低數據庫自身索引Java開發的老牌搜索引擎和服務可移植性較好,適合JAVA原生開發Lucene相對XapianLucene的可擴展性不強(略)對大數據量的支持需要深入調校(專業性)性能一般(傳Sphnix要快2-4倍)Lucene/Solr使用C++開發del.icio.us(1億書簽)Gmane(9千萬條消息)Douban類搜索引擎的簡單服務Xapian非常好5億網頁,1.5T數據庫文件小于1SGmane:9千萬郵件,單服務器Xapianperformancesphinx
最大:
論壇搜索引擎,20億份文檔(50億?),2TB(6TB?)
最忙:,
免費的分類廣告站點(美國的top10),每天5千萬請求
各種復雜的應用Xapian25年歷史C++嵌入式寫慢但讀很快無統計功能利用磁盤存儲結構適合構建搜索引擎
Sphinx起步2003年C++服務器和mysql整合好提供SQLAPI索引推薦在內存中適合更復雜應用Xapianvs.Sphinx針對具體應用:靈活or速度?獨立or整合?Sphinx索引建立靠配置文件Sphinx的attribute全部在內存里面,不靈活Xapian更簡單可控嵌入式,不需啟動服務代碼量不大總體結構比較簡單WhyXapian?搜索服務索引數據庫索引Index搜索Search關系數據庫文件NoSQL數據庫Web應用各種數據源異步、實時BasisofXapianRankedprobabilisticsearch——重要詞匯Relevancefeedback——相關的文檔PhraseandproximitysearchingFullrangeofstructuredbooleansearchoperators("stockNOTmarket",etc)stemmingofsearchterms——近似詞Wildcard——任意匹配(xap*)Synonyms——同義詞Facetsearch——分面搜索Xapian特性Document,documentid:一個整數沒有字段!terms
帶位置信息的詞或者短語,文本搜索values
短的字符串,用于二進制范圍搜索和排序documentdata
用于返回顯示的任何數據,不能搜索Xapian術語首先在Terms里面找documents限定范圍查相應的value,進行排序。如果數據量大,這個過程可能比較慢。如需要,把data取出,顯示完整內容盡量減少第一步的搜索結果量另外,Sphinx也是這個原理。只是為了提高性能,把value全部放入內存了。必需Postinglisttable——每個term包含的documentsRecordtable——document關聯的documentdataTermlisttable——每個document包括的所有term可選positionlisttable——每個term出現的位置valuetable
——主要用于保存、排序等Spellingtable——拼寫糾正synonymtable——同義字典XapianDatabaseflint:1.0——以塊的形式來存儲,默認每塊是8K,理論上每一個文件最大可以達到2048GBchert:1.2數據庫更小,但搜索更快
Brass:更好的支持replication(開發中)Remote:遠端的數據庫Xapian-backend存儲格式Xapian:SWIG(SimplifiedWrapperandInterfaceGenerator)自動生成的接口
底層,功能強,但使用不方便Xappy:高層的封裝對多字段場景,使用更簡單太自動化,不靈活不是很成熟,跟不上xapian的變化理解原理即可,不推薦使用Xapian的python接口Importxapiandatabase=xapian.WritableDatabase('test/',xapian.DB_CREATE_OR_OPEN)#創建文檔對象并修改doc=xapian.Document()doc.set_data(“你相信2012預言嗎?”)doc.add_posting(“你”,1)doc.add_posting(“相信”,2)doc.add_posting(“2012”,4)doc.add_posting(“預言”,8)doc.add_value(0,“20121221”)doc.add_value(1,“2012”)#添加并寫入數據庫database.add_document(doc)mit()Xapian
sample——建立索引Commit保證修改的原子性Atomic大量數據逐一寫入commit會很慢解決方法批量添加,成批commitCommit之前只是內存操作hack代碼,不做完整性檢查多機分區索引,事后合并Xapian-compact--multipassXapian寫入速度不可以并行修改!單寫多讀與SQLite一樣,嵌入式的通病會導致數據庫崩潰!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相關性:enquire.set_sort_by_relevance()默認是按Rank算法計算BM25可使用BoolWeight,采用進索引順序,快速配合enquire.set_docid_order按照其他屬性排序:enquire.set_sort_by_value()
value必須統一為可排序的字符串enquire.set_sort_by_value_then_relevance()enquire.set_sort_by_relevance_then_value()自定義算法地理位置排序圖片相似性排序Xapian排序std::stringXapian::Document::serialise()constSerialisedocumentintoastring.基本形式Wt的確定相關性R通常有qfi
=1Xapian的BM25(Default:k1=1,k2=1,b=0.5)
BM25排序算法內部只有一個索引使用前綴解決Xappy采用固定2個字母做字段前綴例如:Title:2012->TT2012Xapian多索引字段讀寫不沖突支持有限版本的MVCC(多版本并發控制)如果寫過于頻繁,就出現讀失效(需要reopen)可以對數據庫rebuild提升讀性能Xapian搜索沒有特殊的緩存控制全靠操作系統對硬盤讀寫的緩存Xapian緩存提速索引數據量太大,如何可擴展?更新慢搜索慢伸縮性小按不同維度分拆成多個索引按照不同欄目不同的類型的數據輕松支持多庫搜索Add_databaseXapian分庫查詢索引數據庫位于遠端的服務器直接打開遠端的數據庫2種方法ProgXapian.database(Xapian::Remote::open("ssh","xapian-progsrv/var/lib/xapian/data/db1"));服務器xapian-tcpsrv:
--port
33333Xapian::Databasedatabase(Xapian::Remote::open("searchserver",33333));Xapian分布式搜索采用原始方式停止寫數據庫,拷貝數據庫使用支持快照的文件系統
(LVM-LogicalVolumeManager)無法增量備份Xapian備份Xapian會有很多預留空間,便于快速修改可使用xapian-compact工具進行壓縮數據庫變小搜索會更快但修改會變慢僅僅在很少修改的時候做這個Xapian數據壓縮直接支持!Xapian
Replication搜索速度快,支持大數據量強大的全文搜索內存占用少嵌入式,簡單支持“實時”索引Xapian優點不能統計:Sum/Group文檔資料不夠豐富開發維護人員少Value必須為字符串,更占用存儲空間Xapian問題簡捷之美整體設計精巧多方面因素做到了平衡Xapian總結兩種方式調用分詞(ICTCLAS等)API,將分詞結果使用Xapian接口建索引Hacking
QueryParser典型代表:Xunsearch(/)Xapian中文支持高性能、多功能的全文檢索解決方案后端采用C/C++開發多線程服務端,索引設計基于Xapian和scws中文分詞前端是使用腳本語言編寫的開發工具(SDK),目前支持PHP語言除支持基礎的自定義分詞、字段檢索、布爾搜索外,還直接支持相關搜索、拼音搜索、搜索建議等專業功能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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 角磨機安全知識測試題及答案
- 期貨實習報告總結
- 有機無機面試高頻問題和答案
- 統考課試題及答案
- 職高plc試題及答案
- 2025屆七臺河市勃利縣四年級數學第二學期期末教學質量檢測試題含答案解析
- 2026年初中物理電磁學綜合測試題
- 2026年四川省北師大版高二地理選擇性必修綜合練習題
- 2026年金融投資決策與風險控制測試卷
- 2026年重慶市湘教版初中化學下冊第7章能力提升測試卷
- 2025年醫療保障局職位遴選模擬題及答案解析
- 神木煤炭核心指標解析
- 《那么舊那樣新》(2024年江蘇常州中考滿分作文26篇附審題指導)
- 2025年眼鏡定配工(高級)理論知識培訓題庫(含答案)
- 實驗室生物安全管理年度工作計劃
- 外研版2019高中英語必修一單詞表
- 污水處理廠智能控制系統-深度研究
- 土石方機械設備安全培訓
- 混凝土結構與砌體結構高職完整全套教學課件
- NB/T 11446-2023煤礦連采連充技術要求
- GB/T 13077-2024鋁合金無縫氣瓶定期檢驗與評定
評論
0/150
提交評論