分布式实时搜索方案介绍-senseidb

标签: java 架构研究 lucene senseidb | 发表时间:2012-02-27 21:07 | 作者:54chen
出处:http://www.54chen.com

以下内容由 [五四陈科学院]提供

linkedin senseidb
名词解释
zoie:由linkedin开源的建立在lucene之上提供实时索引的系统。它利用两 个内存索引一个硬盘索引来实现实时搜索。
bobo-browse:由linkedin开源的基于lucene的分类浏览搜索系统。
zookeeper:一个分布式的,开放源码的分布式应用程序协调服务,常用来做配置服务。
senseidb:开源,分布式,实时,半结构化的数据库(官方网站上如是说)。实际上是一个将zoie、bobo-browse、zookeeper整合起来,提供各种方便的使用办法的一个项目。项目目标是达到简单易用的分布式实时搜索系统。
kafka:由linkedin开源的高吞吐量的消息系统。
norbert:norbert是一个提供分布式集群服务的开发框架,具备集群管理功能,对开发简单的通信架构,易扩展能承受高吞吐量的框架。scala实现,java无缝使用。其原理是:netty+zookeeper+pb。
IKAnalyzer:中文分词较好用的一个。
lucene:这个不用说了。

使用senseidb
1.解决中文分词问题
senseidb支持在配置上进行自定义analyzer。
要做的事情就是,建立一个jar包,里面只要一个类即可,依赖IKA的包。代码如下:

  1. public class IKAnalyzerFactory implements SenseiPluginFactory<IKAnalyzer> {  
  2.     @Override  
  3.     public IKAnalyzer getBean(Map<String, String> initProperties, String fullPrefix, SenseiPluginRegistry pluginRegistry) {  
  4.         return new IKAnalyzer();  
  5.     }  
  6. }  

将此jar包放于sensei/conf/ext目录下,修改定义文件sensei.properties:
sensei.index.analyzer.class = 上述jar包的全packagename classname

2.使用kafka数据源
在senseidb中有个叫gateway的概念,定义了数据源(实时的写入删除等)。
修改定义文件sensei.properties:
sensei.gateway.class=com.senseidb.gateway.kafka.KafkaDataProviderBuilder
这个class存在于sensei-trunk/sensei-gateway,打包扔进conf/ext即可。

在具体业务中传入数据:

  1. Properties props = new Properties();  
  2.         props.put("zk.connect", "your zk server:2181");  
  3.         props.put("serializer.class", "kafka.serializer.StringEncoder");  
  4.         ProducerConfig config = new ProducerConfig(props);  
  5.         Producer<String, String> producer = new Producer<String, String>(config);  
  6.   
  7.         int i = (int) (Math.random() * 10000);  
  8.   
  9.         JSONObject jo = new JSONObject();  
  10.         jo.put("thread_id", i);  
  11.         jo.put("hot_id", i + 300);  
  12.         jo.put("user_id", i + 1000);  
  13.         jo.put("type", i);  
  14.         jo.put("subject", "这是一个标题" + index);  
  15.         jo.put("contents", index);  
  16.   
  17.         System.out.println(i);  
  18.   
  19.         String msg = jo.toString();  
  20.         // The message is sent to a randomly selected partition registered in ZK  
  21.         ProducerData<String, String> data = new ProducerData<String, String>("hotTopic", msg);  
  22.         producer.send(data);  
  23.   
  24.         producer.close();  

3.索引配置
conf/schema.xml文件中定义了两种结构,一个是table一个是facets。
table的column定义了每个字段。
如下的一个定义,配合了2中的写入:

  1. <table uid="thread_id">  
  2.       <column name="hot_id" type="long" />  
  3.       <column name="user_id" type="long" />  
  4.       <column name="type" type="int" />  
  5.       <column name="subject" type="sring" />  
  6.       <!-- attributes: indexed,store,termvector are only used when type is text -->  
  7.       <column name="contents" type="text" index="ANALYZED" store="YES" termvector="YES" />  
  8. </table>  

可供选择的其他分布式实时搜索方案
Katta:基于Lucene可伸缩分布式实时搜索方案,最早的方案。
Solandra:实时分布式搜索引擎,把solr与Cassandra集合在一起的一个方案。



想快点找到作者也可以到Twitter上留言: @54chen
或者你懒得带梯子上墙,请到新浪微博: @54chen

相关 [分布 实时 搜索] 推荐:

分布式实时搜索方案介绍-senseidb

- - 五四陈科学院-坚信科学,分享技术
以下内容由 [五四陈科学院]提供. zoie:由linkedin开源的建立在lucene之上提供实时索引的系统. 它利用两 个内存索引一个硬盘索引来实现实时搜索. bobo-browse:由linkedin开源的基于lucene的分类浏览搜索系统. zookeeper:一个分布式的,开放源码的分布式应用程序协调服务,常用来做配置服务.

开源分布式搜索平台ELK(Elasticsearch+Logstash+Kibana)+Redis+Syslog-ng实现日志实时搜索

- - C1G军火库
ElasticSearch是一个基于Lucene构建的开源,分布式,RESTful搜索引擎. 设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便. 支持通过HTTP使用JSON进行数据索引. logstash是一个应用程序日志、事件的传输、处理、管理和搜索的平台. 你可以用它来统一对应用程序日志进行收集管理,提供 Web 接口用于查询和统计.

分布式搜索算法

- - 杨尚川的个人页面
对于搜索引擎来说,索引存放在成千上万台机器上,如何进行分布式搜索呢. 假设搜索结果是以分页的方式显示,以PageNumber代表当前页,从1开始,以PageSize代表页面大小,默认为10,以N代表搜索服务器数量. 最简单的分布式搜索算法为:有一台 合并服务器负责接受用户的搜索请求,然后分别向N台机器获取前PageNumber*PageSize条结果,得到的结果数为N*PageNumber*PageSize,然后把这些数据重新进行排序,根据所要显示的页面PageNumber,获取从(PageNumber - 1) * PageSize + 1开始的PageSize条结果返回给用户.

[Elasticsearch] 分布式搜索

- - 编程语言 - ITeye博客
本文翻译自Elasticsearch官方指南的 Distributed Search Execution一章. 在继续之前,我们将绕一段路来谈谈在分布式环境中,搜索是如何执行的. 和在分布式文档存储(Distributed Document Store)中讨论的基本CRUD操作相比,这个过程会更加复杂一些.

Twitter实时搜索系统EarlyBird

- - CSDN博客互联网推荐文章
twitter对存档的tweet使用lucene做全量索引,新发的推文则是实时索引,实时检索(10秒之内索引). 实时索引和检索系统叫EarlyBird. 感觉写得比较清楚简洁,只要这些信息足够真实可信,完全可以做实现参考. 1)基于lucene + java,michael busch是lucene committer.

[原]Lucene系列-近实时搜索

- - 文武天下
近实时搜索(near-real-time)可以搜索IndexWriter还未commit的内容,介于immediate和eventual之间,在数据比较大、更新较频繁的情况下使用. lucene的nrt可以控制更新生效的间隔时间. 从indexwriter中获得indexreader. 建立indexsearcher.

es近实时搜索原理

- - 企业架构 - ITeye博客
 随着按段(per-segment)搜索的发展, 一个新的文档从索引到可被搜索的延迟显著降低了. 新文档在几分钟之内即可被检索,但这样还是不够快.  提交(Commiting)一个新的段到磁盘需要一个 . fsync 来确保段被物理性地写入磁盘,这样在断电的时候就不会丢失数据. 但是  fsync 操作代价很大; 如果每次索引一个文档都去执行一次的话会造成很大的性能问题.

LinkedIn的线上搜索 — 分布式搜索相关

- Shell Wang - J2EE企业应用 顾问/咨询- H.E.&#39;s Blog
   某个项目缘故对分布式搜索的方式和技术的话题开始高度关注,看了不少资料,如 Apache Solr 和 Katta. 好东西大家应该分享, 最近看到LinkedIn 推出的新产品 LinkedIn Signal ,该产品在架构设计上和分布式搜索有着紧密的联系,LinkedIn搜索引擎架构师王坚 (John Wang) 在团队的blog上公布了一些产品内幕,这一资料让我得到了很多启发.

分布式向量搜索系统 Vearch

- - OSCHINA 社区最新软件
Vearch 是一个分布式向量搜索系统,可以用来计算向量相似度,或用于机器学习领域,如:图像识别、视频识别或自然语言处理等各个领域. 本系统基于 Faiss 实现, 提供了快速的向量检索功能. 提供类似 Elasticsearch 的 Restful API 可以方便地对数据及表结构进行管理查询等工作.

永远墙不住的Google实时搜索

- yun - 梭络
打开这个地址,然后输入你要的关键字.