54 CHEN

Senseidb使用手记

linkedin, senseidb 下载 https://github.com/downloads/linkedin/sensei/sensei-1.0.0-release.tar.gz
这个版本是2012年1月份发布的,如果您看到此文时时间太久,请到他们的官方网站去寻找:http://senseidb.com

下载kafka kafka:由linkedin开源的高吞吐量的消息系统。
http://people.apache.org/~nehanarkhede/kafka-0.7.0-incubating/kafka-0.7.0-incubating-src.tar.gz

下载中文分词包IKAnalyzer http://code..com/p/ik-analyzer/downloads/list

编译sensei tar zxvf sensei-1.0.0-release.tar.gz
cd sensei-trunk
./bin/build.sh 或者 mvn package 要是没有maven客户端,需要自行安装(ubuntu下直接apt-get install maven)

编译kafka tar zxvf kafka-0.7.0-incubating-src.tar.gz
cd kafka-0.7.0-incubating-src/
./sbt
update
pacakge

编译IKA 新建一个jar包,里面只有一个类,内容如下:

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

配置sensei的sensei.properties 重要的几点:
1)zookeeper的url: sensei.cluster.url=zookeeper.n.miliao.com:2181 2)IKA的class设置: sensei.index.analyzer.class = com.chen.IKA.IKAnalyzerFactory 3)kafka所使用的声明: sensei.gateway.class=com.senseidb.gateway.kafka.KafkaDataProviderBuilder
sensei.gateway.kafka.zookeeperUrl=zookeeper.n.miliao.com
#下面的topic很关键,消息系统中用topic区别不同的消息 sensei.gateway.kafka.topic=hotTopic #ProducerData生成时,也应该叫hotTopic

启动sensei 略去了设置schema,可参考http://www.54chen.com/java-ee/scalable-reltime-search-senseidb.html.

cd sensei-trunk
bin/start-sensei-node.sh example/xxx/conf

(所有的使用的jar,比如说kafka\IKA及其依赖的包,都扔到conf/ext下)

配置kafka的server.properties 关键的一点:
1)设置kafka使用的zookeeper地址:

zk.connect=zookeeper.n.miliao.com:2181

启动kafka

cd kafka-0.7.0-incubating-src
nohup bin/kafka-server-start.sh config/server.properties &

[如果你的schema定义无误,那么到这里你就可以通知kafka有消息进入,sensei就会自动开始消费这些消息进行索引等过程]

在具体业务中传入数据参考前文:http://www.54chen.com/java-ee/scalable-reltime-search-senseidb.html

发起搜索

  1. public static JSONArray doSearch(String key, int limit, int offset, String senseiServer) throws JSONException {
  2. SenseiClientRequest senseiRequest = SenseiClientRequest.builder().query(Queries.stringQuery(key)).paging(limit, offset)
  3. .fetchStored(true).build();
  4. SenseiResult senseiResult = new SenseiServiceProxy(senseiServer, 8080).sendSearchRequest(senseiRequest);
  5. List list = senseiResult.getHits();
  6. JSONArray l = new JSONArray();
  7. for (int i = 0; i < list.size(); i++) {
  8. SenseiHit hit = list.get(i);
  9. l.put(new JSONObject(hit.getSrcdata()));
  10. }
  11. return l;
  12. }

____EOF____
2012.3.13 version 1

原创文章如转载,请注明:转载自五四陈科学院[http://www.54chen.com]

Posted by 54chen 架构研究