首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > 其他数据库 >

senseidb中对zoie的调整

2012-11-07 
senseidb中对zoie的整合com.senseidb.conf.SenseiServerBuilder.buildCore()方法中开始对zoie进行实例化:1

senseidb中对zoie的整合
com.senseidb.conf.SenseiServerBuilder.buildCore()方法中开始对zoie进行实例化:

1 构建ZoieConfig实例:
ZoieConfig会设置Analyzer, Similarity实例,这些基本的lucene对象可以在sensei配置文件中自定义。设置batchSize, batchDelay, maxBatthSize, rtIndexing, skipBadRecord, freshness等属性也是在sensei配置中可配的。

2. 构建SenseiZoieFactory
sensei自己实现了一个默认的解释器,实现了ZoieIndxableInterpreter(用于把DataProvider产生的DataEvent转换成lucene Document)

调用constructZoieFactory方法创建SenseiZoieFactory实例:
private SenseiZoieFactory<?> constructZoieFactory(
ZoieConfig zoieConfig,
List<FacetHandler<?>> facetHandlers,
List<RuntimeFacetHandlerFactory<?, ?>> runtimeFacetHandlerFactories,
ZoieIndexableInterpreter interpreter) {
2.1
sensei自己实现了一个默认的IndexReader包装器
SenseiIndexReaderDecorator decorator = new SenseiIndexReaderDecorator(facetHandlers, runtimeFacetHandlerFactories);
这个装饰器整合了linkedIn另一个开源项目Bobo. Bobo提供一中结构化的模式来对索引进行查询。

2.2
构建SenseiZoieSystemFacotry实例
SenseiZoieSystemFactory senseiZoieFactory = new SenseiZoieSystemFactory(idxDir, dirMode, interpreter, decorator, zoieConfig);
idxDir是索引所在的目录
dirMode是目录类型,默认是simple

2.3
实例化一个lucene的Filter实例purgeFilter, 过滤器,是根据时间进行过滤。同样是可配的

2.4
可选的IndexCopier,可能用来实现索引备份的。?
}

3. 在实例化SenseiCore的时候,会传递SenseiZoieSystemFactory实例



SenseiCore在启动的时候,会根据所在node的partition数量,建立相对应的IndexDirecory,每个目录,都有一个Zoie实例进行管理。
for (int part : _partitions){
Zoie<BoboIndexReader,?> zoieSystem = _zoieFactory.getZoieInstance(_id,part);
...
}
所以在sensei.properties中指定的索引目录只是一个父目录,sensei会根据nodeId和partitionId进行子目录,子索引管理。

Sensei会注册每个Zoie实例,通过JMS进行通信。

public void start() throws Exception {if (_started)return;for (int part : _partitions) {Zoie<BoboIndexReader, ?> zoieSystem = _zoieFactory.getZoieInstance(_id, part);// register ZoieSystemAdminMBeanString[] mbeannames = zoieSystem.getStandardMBeanNames();for (String name : mbeannames) {JmxUtil.registerMBean(zoieSystem.getStandardMBean(name),"zoie-name", name + "-" + _id + "-" + part);}if (!zoieSystems.contains(zoieSystem)) {zoieSystem.start();zoieSystems.add(zoieSystem);}_readerFactoryMap.put(part, zoieSystem);}try {pluggableSearchEngineManager.start(this);logger.info("initializing index manager...");if (_indexManager != null) {_indexManager.initialize(_readerFactoryMap);}logger.info("starting index manager...");if (_indexManager != null) {_indexManager.start();}logger.info("index manager started...");} catch (Exception e) {logger.error("Unable to start indexing manager, indexing not started...",e);}_started = true;}

       

热点排行