网络搜索引擎原理007Introduction to Xapian_第1页
网络搜索引擎原理007Introduction to Xapian_第2页
网络搜索引擎原理007Introduction to Xapian_第3页
网络搜索引擎原理007Introduction to Xapian_第4页
网络搜索引擎原理007Introduction to Xapian_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论