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 ZoieSystemAdminMBean
String[] 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;
}
分享到:
相关推荐
Zoie实时搜索架构,作为一款基于Apache Lucene构建的系统,旨在提供分布式、实时和高性能的搜索服务,满足了大数据背景下对搜索效率的高要求。尽管Zoie的文档可能不够详尽,但其核心技术和优势依然值得我们深入探讨...
在实际应用中,每当有新的person数据插入或更新时,Zoie会监控到这些变化,然后对这些数据进行增量索引,确保索引始终保持最新状态。 总结起来,Lucene5学习之增量索引(Zoie)涉及到的关键技术点包括: 1. 基于...
zoie, 实时搜索/索引系统 什么是 ZoieZoie是用Java编写的实时搜索/索引系统。维基维基在以下位置可用:http://linkedin.jira.com/wiki/display/ZOIE/Home问题问题在以下位置跟踪:http://link
在实际应用中,Lucene 5 + Zoie的组合特别适合于那些需要快速响应新数据、并且对数据新鲜度要求高的场景,如新闻网站、社交媒体、电子商务平台等。开发者可以通过API接口,轻松地将新数据接入到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_...
- 系统的整合与管理能力被提及,以及Zoie实时索引系统的特点和作用。 3. 搜索的云服务化(NCS) - 讨论了将搜索服务迁移到云环境下的优势,如提供轻量级运维、简化使用与运维过程、以及资源的弹性利用和共享。 -...
**Document**:在 Lucene 中,Document 代表一条记录,它可以包含多个 Field(字段)。例如,一篇文章可能有标题、正文和修改时间等字段。每个 Field 都有其特定的存储和索引属性,如是否分词、是否存储原始内容以及...
通过对"zoieleung0309.github.io-master"压缩包的探索,我们可以深入学习以上提到的CSS知识点,并可能发现更多实际应用中的技巧和最佳实践。此外,如果该网站包含源码,还可以研究作者如何运用这些技术构建实际的...
- 数据融合是将来自不同来源的数据整合在一起,去重是确保不重复展示相同信息。重排序和精确控位则用于优化搜索结果,提高用户满意度。 4. **个性化与关联商品**: - 个性化搜索考虑用户的个人偏好,通过学习搜索...
- **Zoie**:基于Lucene构建,来自LinkedIn,适用于中小规模的实时搜索需求。 - **Sphinx**:自1.10-beta版本起支持实时搜索功能,被广泛应用于craigslist、netlog等网站。 通过以上分析可以看出,实时搜索不仅是一...
下面将对这些知识点进行详细阐述。 ### 一、5W+1H —— 垂直搜索引擎之开篇 #### 1. Why(为什么要做 —— 原因) - **客观因素**: - 当网站的主要目标是促成交易时,且访问该网站的用户通常是基于明确需求而来...
以下是对这些知识点的详细说明: **一、Web开发** 1. **MVC(模型-视图-控制器)**:这是一种软件设计模式,用于将业务逻辑、数据与用户界面分离。模型处理数据,视图负责展示,控制器协调它们之间的交互。 2. **...
例如FeedSystem是基于开源的key-value数据库Redis构建的,而Instantsearchserver是基于zoie进行开发的。NoticeSystem则利用了mochiweb的高效通信特性,采用了Erlang编程语言。MQserver使用了RabbitMQ作为基础的异步...
HTML代码中可能包含了对个人品牌的表述,页面布局的逻辑,以及交互元素的设计。如果存在JavaScript代码,那还涉及到动态功能的实现,如表单处理、动画效果或API交互。不过,具体的细节需要直接查看源代码才能得知。
- **案例简介**:未提供具体细节,但可以从名称推测该系统主要用于管理Hadoop集群中的各种资源。 **4. Pig相关——可视化用户自主查询** - **案例简介**:未提供具体细节,但可以从名称推测该应用旨在利用Pig工具...
实验2 Wireshark的安装与基本操作 1. 实验目的 学习 Wireshark 的基本操作,抓取和分析有线局域网的数据包,熟悉一些应用层命令和协议。
计算机网络 实验1 常用网络命令的使用 1. 实验目的 (1) 掌握 ping、ipconfig、tracert、netstat、ARP、nslookup、net 等命令含义和基本用法; (2) 学会运用 ping、ipconfig、tracert、netstat、ARP、nslookup、net ...
javascript封装一个模态框:头(标题、关闭按钮)、内容、尾(操作按钮:取消和确定)。标题可以自定义,默认值是“标题”; 内容区域可以是文本或者富文本,操作按钮可以控制显隐和显示文案; ...
实验4 模拟器的配置与使用 1. 实验目的 (1) 掌握Packer Tracer软件的用法。 (2) 掌握交换机基本信息的配置管理以及配置基本命令的用法。 2. 实验内容简要描述 运用 Packer Tracer 软件,进行基本配置与管理、交换机...