`
shixin42
  • 浏览: 55629 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

zoie初窥手记

 
阅读更多
zoie是linkedIn开发的基于lucene的搜索组件,主要目的是支持近实时搜索,虽然后续的lucene也提供了近实时搜索的功能,但是相比来说,zoie还是具备一些优势的。

senseidb的索引管理,近实时搜索等服务都是基于zoie的。通过阅读senseidb的源代码,可以理解senseidb和zoie的一些整合。

zoie系统的核心概念:
ZoieSystem - 既实现了DataConsumer接口(用来接收事件,添加/更改/删除索引),又实现了IndexReaderFactory<ZoieIndexReader<R extends IndexReader>>(完成搜索功能)

DataProvider - 用户要自定义DataProvier,它会生成DataEvent, 将ZoieSystem实例传给它,它会调用ZoieSystem实例的consume方法进行消费。

IndexableInterpreter - 构造ZoieSystem实例的时候需要这个解释器,它的作用就是把从DataProvider获取的对象转换成lucene的document

IndexReaderDecorator - IndexReader的装饰器,通过ZoieSystem请求IndexReader实例的时候,会调用此包装器对它进行包装。在和Zoie同一个项目Bobo(实现Facet搜索,使用过Solr的同学可能会比较熟悉)中,实现了BoboIndexReaderDecorator,其作用就是在IndexReader打开的时候,将Facet信息加载到内存中形成某种数据结构,从而在收集Facet的时候快速的使用。

构建ZoieSystem的时候还需要指定Analyzer(分词), Similarity(相似度评分器),batchSize和batchDelay(数量上和时间上触发索引)和是否开启实时索引的标志位。


ZoieSystem的构造函数是如何使用这些参数进行初始化的:

(1) 其根据制定的索引文件夹${index.directory}生成一个DefaultDirectoryManager _dirMgr,用于管理索引文件夹及索引的版本号IndexSignature。

(2) 生成一个SearchIndexManager _searchIdxMgr,它是实现实时搜索的关键类,包含如下的成员变量:

    第一步中生成的DefaultDirectoryManager
    spring配置文件中传进来的IndexReader的装饰器IndexReaderDecorator _indexReaderDecorator
    DefaultDocIDMapperFactory _docIDMapperFactory用来维护Zoie的文档ID同Lucene的文档ID号之间的对应关系
    DiskSearchIndex _diskIndex用于操作硬盘上的索引,此时便得到一个指向硬盘索引的IndexReader
    Status _diskIndexerStatus当前索引的状态,共两种状态Sleeping和Working,所谓的Sleeping就是新添加的文档仅仅进入内存索引,所谓的Working即其中一个内存索引正在和硬盘上的索引进行合并,下一节实时机制的时候,我们会详细讨论
    Mem _mem结构,是利用两个内存索引,一个硬盘索引配合实现实时索引的关键,详细的机制,我们下一节会讨论。Mem结构包含以下部分:
        RAMSearchIndex<R> _memIndexA用于操作内存索引A
        RAMSearchIndex<R> _memIndexB用于操作内存索引B
        RAMSearchIndex<R> _currentWritable根据索引所处的状态,有时候A是用于添加新文档的内存索引,有时候B是用于添加新文档的索引
        RAMSearchIndex<R> _currentReadOnly同上一个相反,这是当前不会被添加新文档的内存索引,从下面的讨论中我们可以知道,此内存索引此时正在和硬盘上的索引进行合并。
        ZoieIndexReader<R> _diskIndexReader硬盘索引的IndexReader

(3) 将参数赋值成员变量ZoieIndexableInterpreter _interpreter,Analyzer _analyzer,Similarity _similarity

(4) 创建DiskLuceneIndexDataLoader _diskLoader对象,用于索引到硬盘索引

(5) 如果实时索引_realtimeIndexing设置为true,则创建RealtimeIndexDataLoader _rtdc,第四步中的_diskLoader作为其成员变量。将其设置为ZoieSystem的父类AsyncDataConsumer的成员变量setDataConsumer(_rtdc)

zoie实现实时搜索的机制
zoie维护两份mem index和一份disk index,初始的时候有一个活跃的mem index和disk index,查询的时候,它们都会返回IndexReader,而新增/删除/更新的时候都只操作活跃的mem index。当mem index到达一定触发点的时候,会新建第二个mem index,这时候第一个mem index会把docuemnt和disk index进行merge,在此期间所有的update都会进入到No.2 mem index,而查询则会返回所有三个index的IndexReader。当No.1 mem index整合完毕后,又会马上回到初始状态。采用mem index的目的就是能够实时反应索引的变化。

zoie和sensei整合的部分在下个博客!

参考:
引用
http://www.cnblogs.com/forfuture1978/archive/2010/11/29/1891476.html

分享到:
评论

相关推荐

    Zoie实时搜索架构

    《Zoie实时搜索架构:基于Lucene的高效解决方案》 在信息爆炸的时代,快速、准确地检索数据已经成为各类业务的必备能力。Zoie实时搜索架构,作为一款基于Apache Lucene构建的系统,旨在提供分布式、实时和高性能的...

    Lucene5学习之增量索引(Zoie)

    《深入理解Lucene5增量索引与Zoie系统》 在信息检索领域,Lucene是一个广泛使用的全文搜索引擎库,其强大的索引能力和高效的搜索性能为开发者提供了强大的支持。然而,随着数据量的不断增长,如何高效地进行增量...

    zoie, 实时搜索/索引系统.zip

    zoie, 实时搜索/索引系统 什么是 ZoieZoie是用Java编写的实时搜索/索引系统。维基维基在以下位置可用:http://linkedin.jira.com/wiki/display/ZOIE/Home问题问题在以下位置跟踪:http://link

    lucene5+zoie实现近实时索引

    《Lucene 5 + Zoie 实现近实时索引详解》 在当今大数据时代,搜索引擎技术扮演着至关重要的角色,而Lucene作为一款强大的全文搜索引擎库,被广泛应用于各种信息检索系统。然而,传统的Lucene在处理大规模数据时,...

    ewhine_search:ewhine 搜索系统使用 zoie

    The ewhine search system use zoie. #安装 git clone :jimrok/ewhine_search.git cd ewhine_search java -jar server.jar 如果在Mac的控制台下,使用 java -Dfile.encoding=UTF-8 -jar server.jar #索引 在ewhine_...

    zoieleung0309.github.io

    标题 "zoieleung0309.github.io" 暗示这是一个个人或项目的GitHub Pages网站,通常用于展示个人作品、博客或项目代码。描述同样简洁,没有提供额外信息,所以我们主要依据标签“CSS”来展开讨论。...

    lucene of lietu

    Zoie 是 LinkedIn 支持的一个开源实时搜索引擎项目,专门针对需要高时效性的搜索场景,如 Twitter 消息和新闻搜索。Zoie 在 Lucene 的基础上进行了优化,确保了以下特性: 1. **即时索引**:一旦文档加入索引,就...

    吴一男:网易通用搜索优化之道

    - 搜索索引和检索引擎基于开源项目Lucene构建,而实时索引采用了Zoie技术。 - 数据接入可能利用DataStream进行同步,支持HTTP/REST API和Java SDK等多种服务接口。 - 系统配置管理使用了Zookeeper工具,以实现...

    zoieboyd.github.io

    这个项目可能包含了用户Zoie Boyd的个人信息、作品集、博客文章或者其他相关的内容。 【描述】"zoieboyd.github.io" 的描述没有给出具体的细节,但从一般的GitHub网页实践来看,这可能是Zoie Boyd利用GitHub Pages...

    张琨:教育社交平台的web架构分享

    例如FeedSystem是基于开源的key-value数据库Redis构建的,而Instantsearchserver是基于zoie进行开发的。NoticeSystem则利用了mochiweb的高效通信特性,采用了Erlang编程语言。MQserver使用了RabbitMQ作为基础的异步...

    搜索实时更新系统架构介绍.pptx

    这可能涉及到软提交(SoftCommit)和硬提交(HardCommit),以及使用像Zoie这样的系统来管理多个索引版本。 8. **数据处理模型**: - 数据模型设计包括将产品数据分解成列,简化操作和重用。例如,将数据按列粒度处理...

    lucene solr搜索引擎介绍ppt,很不错哟,共44页

    同时,它还催生了如bobo-browse和Zoie这样的开源项目,分别用于分类统计和实时搜索。 **Solr 搜索服务器** Solr是基于Lucene构建的一个企业级搜索平台,它为Lucene的功能添加了额外的特性,如集群、分布式搜索、...

    CSDN TUP第二期:王鹏云演讲PPT

    - **Zoie**:基于Lucene构建,来自LinkedIn,适用于中小规模的实时搜索需求。 - **Sphinx**:自1.10-beta版本起支持实时搜索功能,被广泛应用于craigslist、netlog等网站。 通过以上分析可以看出,实时搜索不仅是一...

    j2ee面试考察点.pdf

    3. **实时搜索设计**:如Zoie系统,结合内存和磁盘,提供快速的搜索响应。 4. **Lucene TF/IDF公式**:TF(Term Frequency)衡量词频,IDF(Inverse Document Frequency)衡量词的重要性,共同决定文档相关性。 5....

    垂直搜索-您不知道的秘密 -solr中国-风雨V1.1

    - **Solr**、**Elasticsearch**、**Zoie**、**BoCo**等:基于Lucene开发的搜索引擎解决方案,各有特色。 - **Sphinx**:一款高性能的全文检索引擎,适用于大数据量的实时搜索。 - **Xapian**:一种高度可扩展的全文...

    淘宝支付宝数据平台

    - 使用的开源产品包括Hadoop、HBase、Zookeeper、Solr和Zoie。 - **逻辑架构**: - HBase作为数据输入源。 - Zookeeper用于动态感知节点状态。 - ARSC Node与Solr Cloud共同构成搜索客户端。 - **物理集群架构**...

    计算机网络 实验1 常用网络命令的使用

    计算机网络 实验1 常用网络命令的使用 1. 实验目的 (1) 掌握 ping、ipconfig、tracert、netstat、ARP、nslookup、net 等命令含义和基本用法; (2) 学会运用 ping、ipconfig、tracert、netstat、ARP、nslookup、net ...

    计算机网络 实验6-7 交换机及其VLAN的配置-协议分析-ARP协议

    实验6_7 交换机及其VLAN的配置_协议分析—ARP协议 1. 实验目的 (1) 熟悉交换机的配置环境; (2) 了解交换机基于端口的 VLAN 的设置。 (3) 掌握 Wireshark 的安装; (4) 熟练并掌握 Wireshark 的基本使用;...

    计算机网络 实验2 Wireshark的安装与基本操作

    实验2 Wireshark的安装与基本操作 1. 实验目的 学习 Wireshark 的基本操作,抓取和分析有线局域网的数据包,熟悉一些应用层命令和协议。

    计算机网络 实验4 Packer Tracer模拟器的配置与使用

    实验4 模拟器的配置与使用 1. 实验目的 (1) 掌握Packer Tracer软件的用法。 (2) 掌握交换机基本信息的配置管理以及配置基本命令的用法。 2. 实验内容简要描述 运用 Packer Tracer 软件,进行基本配置与管理、交换机...

Global site tag (gtag.js) - Google Analytics