1 / 21

基于 firtex2 搭建分布式搜索引擎

基于 firtex2 搭建分布式搜索引擎. 郭瑞杰. 什么是 firtex2 ?. 高性能、功能丰富、跨平台的开源搜索系统 发展历程: 始于 2005 年 ( firtex ) 2009 年全部重构 (firtex2) 2012 年易用性 / 功能大幅提高 ( 最新版本: 0.5). 为什么选择 firtex2. 高性能 : (TREC 10g 160 万英文文档测试 ) 文档 索引: 6220 docs/ sec (sphinx: 1735 docs/ sec, 3+ )

alma
Download Presentation

基于 firtex2 搭建分布式搜索引擎

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 基于firtex2搭建分布式搜索引擎 郭瑞杰

  2. 什么是firtex2? • 高性能、功能丰富、跨平台的开源搜索系统 • 发展历程: • 始于2005年(firtex) • 2009年全部重构(firtex2) • 2012年易用性/功能大幅提高 (最新版本:0.5)

  3. 为什么选择firtex2 • 高性能: (TREC 10g 160万英文文档测试) • 文档索引:6220 docs/sec (sphinx: 1735 docs/sec, 3+) • 查询:latency: 10~100 ms/query (sphinx: 2+) • 功能丰富: • 支持UTF-8/GBK中、英文,多字段、多属性文本 • 布尔、短语和近义词查询,带表达式的多重排序和过滤 • 中文语义分词、单字分词 • 灵活易用 • Xml灵活配置 • 提供php、pythonapi • 跨平台 (C++实现): • Windows/Ubuntu/Red hat/Mac OS • 开源(LGPL): 商业友好,免费使用 • http://souceforge.net/projects/firtex • 用户手册:http://firtex.sourceforge.net

  4. 如何快速上手-单机版 小规模数据:单机 Frontend firtex2 搜索服务 数据库 索引 结构化文档 构建索引 ……

  5. Step1. 准备数据 数据格式一:firtex2文档 数据库 DOC=ADD^[ TITLE=车库咖啡^^ CONTENT=开源技术小组技术交流^^ DATE=2012-07-29 15:00:00^^ ^] DOC=ADD^[ … ^] 数据导出工具 结构化文档 数据格式二:XML文档 <DOC> <URL>http://weibo.com/ruijieguo</URL> <TITLE>车库咖啡</TITLE> <CONTENT>开源技术小组</CONTENT> <DATE>2012-07-29 15:00:00</DATE> </DOC> <DOC> ... </DOC> ……

  6. Step2. 构建索引-配置 fbuilder.xml: <?xml version="1.0" encoding="UTF-8"?> <configure> <global> … </global> <collection> … </collection> <index_schema> <fields> <field> <name>TITLE</name> <type>UTF8_TEXT</type> </field> … </fields> </index_schema> </configure> 全局配置,例如词典路径、合并策略、内存控制 数据源配置,类型、路径,性能相关参数 定义文档结构: 有什么字段,字段类型和索引方式 详细配置请参考《用户使用手册》

  7. Step2. 构建索引-运行 Ubuntu/Red Hat/Mac OS等: $ svnco https://firtex.svn.sourceforge.net/svnroot/firtex/firtex2/trunk firtex2 $ cd firtex2 $ ./bootstrap & make & make install $ ./fbuilder -c fbuilder.xml Windows下: Visual studio 2005/2008/2010

  8. Step3. 搜索服务-配置 fsearchd.xml <?xml version="1.0" encoding="UTF-8"?> <configure> <global> … </global> <searchd> <server> <host>localhost:19801</host> <thread_pool>10</thread_pool> <logger_conf>./logger_conf.xml</logger_conf> </server> <resource> <index_data>../examples/data/plain_utf8_index</index_data> <default_field>BODY</default_field> <refresh_timer>0</refresh_timer> </resource> </searchd> </configure> 全局配置,例如词典路径、合并策略、内存控制 定义服务监听端口,线程池和logger配置路径 索引数据路径,数据刷新频度

  9. Step3. 搜索服务-运行 $ ./fsearchd -c conf/fsearchd.xml -t http $ wget http://localhost:19801/search?query=BODY:车库咖啡 HTTP 服务: RPC 服务: $ ./fsearchd -c conf/fsearchd.xml -t rpc $ ./frpcclient -s localhost -p 19801 -q query=BODY:车库咖啡

  10. 查询结果示例 <?xml version="1.0"?> <result> <hits number_hits=”2" total_hits="24174" cost="15"> <hit> <docid>791822</docid> <score>15.70</score> <fields> <DOCID> <![CDATA[WTX034-B38-352]]> </DOCID> <URL> <![CDATA[http://musicweb.austin.tx.us:80/Archives/96Feb.html]]> </URL> </fields> </hit> <hit> … </hit> </hits> </result>

  11. 如何快速上手-机群版 大规模数据:机群 Blender Proxy Proxy Cluster1 Cluster2 Searcher Searcher Replica … … … … … … Shard Shard Build & Copy 数据源(HDFS) …

  12. fproxy.xml proxy服务-配置 <?xml version="1.0" encoding="UTF-8"?> <configure> <proxy> <server> … </server> <resource> <load_ballance>round_robin</load_ballance> <shards> <shard> <name>shard1</name> <replicas> … </replicas> </shard> … </shards> </resource> </proxy> </configure> replica间的负载均衡策略 Shards/replicas列表 详细配置请参考《用户使用手册》

  13. Proxy服务-运行 $ ./fproxy -c conf/fsearchd.xml -t http -r proxy $ wget http://localhost:19803/search?query=BODY:车库咖啡 HTTP 服务: RPC 服务: $ ./fproxy -c conf/fsearchd.xml -t rpc $ ./frpcclient -s localhost -p 19803 -q query=BODY:车库咖啡

  14. 其他选择 • Amazon Cloud Search (收费) • 阿里云开放云搜索: http://css.aliyun.com(免费) • Lucene(Java) • IndexTank (基于Lucene,Linkedin) • ElasticSearch (基于Lucene, RESTfull API) • Solr/SolrCloud (基于Lucene) • Sphinx(C++, 支持嵌入mysql) • Xapian (C++)

  15. 原理篇—倒排索引 Doc0:海量0/数据1/开源2/解决3/方案4/和5/技术6/方案7/分享8 Doc1:从0/开源1/中2/来3/,4/到5/开源6/中7/去8 0, 1, <0> 0, 1, <0> 0, 1, <0> 0, 1, <2>; 1, 2<1, 6> 0, 1, <3> 0, 1, <7> 0, 1, <5> 0, 1, <6> 0, 1, <8> 1, 1, <0> 1, 2, <2, 7> 1, 1, <3> 1, 1, <5> 1, 1, <8>

  16. 倒排索引压缩 0 15 • Firtex2采用New-PForDelta压缩算法 (http://www2008.org/papers/pdf/p387-zhangA.pdf) 0 1 3 32 0 1 3 16 0 1 3 31 0 1 3 0 0 1 3 1 0 1 20 2 0 1 3 1 0 1 3 0 … 0 15 0 1 3 0 0 1 3 0 0 1 3 3 0 1 3 0 0 1 3 1 0 2 0 2 0 1 3 1 0 1 3 0 … 8 7 4 11 7 22 5 Simple 9 压缩 Pack到2bit存储

  17. 倒排索引压缩 • 索引压缩率: • Doc-list: 26% • Tf-list:10% • Pos-list:32% • 平均压缩率:26%

  18. 其他常用压缩算法 • VInt (Lucene) • Group Vint (google) • Simple 9/Simple 16 • ……

  19. 后续计划 • 支持在hadoop上构建大规模数据索引 • 分布式动态调度 • 更多更友好易用的接口—RESTfull API • 毫秒级实时索引 • 监控

  20. Roadmap Query Blender Zookeeper API (RPC/RESTfull) … Proxy Proxy Cluster1 Cluster2 Searcher Searcher Deploy Tools Master Monitor (UI) Real-time Data Feeder Replica Replica Node pool Raw data … … … … … … … Data Gather Shard Shard Dispatch HDFS Build Job …

  21. 谢谢!欢迎大家试用、参与http://sourceforge.net/projects/firtex谢谢!欢迎大家试用、参与http://sourceforge.net/projects/firtex 新浪微博:@郭瑞杰_ft2

More Related