`

bobo zoie的IndexReaderDecorator

阅读更多

  zoie是linkedin的一个基于lucene的实时搜索系统,zoie的实时搜索原理参考 http://rabbit9898.iteye.com/blog/831676 或者

http://www.cnblogs.com/forfuture1978/archive/2010/11/29/1891476.html 。

 

1. BoboIndexReaderDecorator 注入到zoie中

 

在ZoieSystem.java中一个参数  IndexReaderDecorator<R> indexReaderDecorator,表示Reader的修饰者。

 这里使用的装饰者模式。被包装的IndexReader是直接打开Lucene索引的IndexReader,IndexReaderFactory在得到这些IndexReader后,都会经过此类封装一下,再返回给用户。

 

<bean id="idxDecorator1" class="proj.zoie.impl.indexing.DefaultIndexReaderDecorator" />

默认的装饰者idxDecorator1什么都不做,将原IndexReader返回。

 

 

 <bean id="idxDecorator2" class="com.browseengine.bobo.service.impl.BoboIndexReaderDecorator">
  <constructor-arg ref="handlers" />
 </bean>

 

  基本的Lucene的IndexReader打开,会加载和初始化一些基本的东西,然而有时候,用户需要在IndexReader打开的时候,同时加载一些自己的东西,此类给了用户这样一个机会,用户只要实现自己的装饰者就可以了。在和Zoie另一个项目Bobo实现了BoboIndexReaderDecorator(即上面的idxDecorator2),其作用就是在IndexReader打开的时候,将Facet信息加载到内存中形成某种数据结构,从而在收集Facet的时候快速的使用。

 

BoboIndexReaderDecorator.java 在 bobo-service/src目录下 package com.browseengine.bobo.service.impl 中。

 

2. BoboIndexReaderDecorator的注入后的调用过程

现在分析一下:



 发现是只由ZoieSegmetReader来调用。

 

idxDecorator2   注入到ZoieSytem.java中,通过参数传递到SearchIndexManager中

 

    public ZoieSystem(DirectoryManager dirMgr,ZoieIndexableInterpreter<V> interpreter,IndexReaderDecorator<R> indexReaderDecorator,DocIDMapperFactory docidMapperFactory,Analyzer analyzer,Similarity similarity,int batchSize,long batchDelay,boolean rtIndexing,int maxBatchSize)
    {
    ...
      _searchIdxMgr=new SearchIndexManager<R>(_dirMgr,indexReaderDecorator,docidMapperFactory);

 

 

SearchIndexManager中是如何调用ZoieSegmetReader的呢?

 

在SearchIndexManager中,把_indexReaderDecorator传到DiskSearchIndex中:

_diskIndex = new DiskSearchIndex<R>(_dirMgr, _indexReaderDecorator,this);

 

在DiskSearchIndex中 又赋值给 IndexReaderDispenser:

  public DiskSearchIndex(DirectoryManager dirMgr, IndexReaderDecorator<R> decorator,SearchIndexManager<R> idxMgr){
    super(idxMgr, true);  
    _dirMgr = dirMgr;
    _mergePolicyParams = new MergePolicyParams();
    _dispenser = new IndexReaderDispenser<R>(_dirMgr, decorator,this);
    _mergeScheduler = new SerialMergeScheduler();
    _deletionPolicy = new ZoieIndexDeletionPolicy();
  }

 

在IndexReaderDispenser 中,通过传递到它的类间类InternalIndexReader:

 

  public IndexReaderDispenser(DirectoryManager dirMgr, IndexReaderDecorator<R> decorator,DiskSearchIndex<R> idx)
  {
      _idx = idx;
    _dirMgr = dirMgr;
    _decorator = decorator; 

 

 public ZoieIndexReader<R> getNewReader() throws IOException
    {
        int numTries=INDEX_OPEN_NUM_RETRIES;   
        InternalIndexReader<R> reader=null;
              
        while(reader==null)
    {
          ... ...     
        if (_currentReader==null){ //在newReader 返回的是InternalIndexReader 
          reader = newReader(_dirMgr, _decorator, sig);
            break;
        }
        else{
          reader = (InternalIndexReader<R>)_currentReader.reopen(true);
          _currentSignature = sig;
        }
      }

 

   再看一下InternalIndexReader,原来继承实现了 ZoieMultReader.

 

static final class InternalIndexReader<R extends IndexReader> extends ZoieMultiReader<R>

 

 

而 ZoieMultReader中调用了ZoieSegmetReader。

	public ZoieMultiReader(IndexReader in,IndexReaderDecorator<R> decorator) throws IOException
	{
	  super(in,decorator);
	  _readerMap = new HashMap<String,ZoieSegmentReader<R>>();
	  _decoratedReaders = null; 
	  IndexReader[] subReaders = in.getSequentialSubReaders();
	  init(subReaders);
	}

 
 绕来绕去,终于调用着了 :)

 

ZoieIndexReader的继承关系:



 

 

 

  • 大小: 28.8 KB
  • 大小: 10.7 KB
  • 大小: 7.1 KB
0
0
分享到:
评论

相关推荐

    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在处理大规模数据时,...

    lucene of lietu

    **Lucene 概述** Lucene 是一个高性能、全文本搜索库,由 Doug Cutting 创建并在 2001 年...开发者可以利用 Lucene 构建自己的搜索引擎,而 LinkedIn 通过支持 Bobo 和 Zoie 等项目,进一步推动了实时搜索技术的发展。

    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 solr搜索引擎介绍ppt,很不错哟,共44页

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

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

    - 搜索索引和检索引擎基于开源项目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. **数据处理模型**: - 数据模型设计包括将产品数据分解成列,简化操作和重用。例如,将数据按列粒度处理...

    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