网上有不少关于如何使用lucene完成实时搜索功能的文章。鉴于lucene的实现机制,绝大多数解决办法都是采用一定频率访问lucene索引,发现变更,然后搜索数据,返回结果。这种办法只能达到准实时效果,且会带来磁盘的I/O消耗。

抛开在lucene架构下能否找到更好的解决办法不谈,我们试着考虑到底是什么需求促使我们去寻找实时搜索lucene的解决方法的。想必大多数情况下,都是希望能够实时获取满足了某种条件的数据,而后对其进行计算或展示吧。既然如此,那么我们在对数据流处理时,直接匹配流中的数据岂不是更好?也只有这样做才能做到真正意义上的实时效果。这样看下来,其实我们只要有一个能够支持lucene查询语法的实时计算引擎就可以达到目的了。开源系统Tripod就是依据此思路构建起的兼容lucene查询语法的计算引擎。使用时只要集成其提供的api,设置好匹配条件,然后不断传入待匹配数据就可以实现对数据流的实时搜索了。

Tripod使用非常简单,其主要功能都集中在tripod-engine模块中,可通过如下maven依赖引入tripod-engine模块。

<dependency>
<groupId>org.datayoo.tripod</groupId><artifactId>tripod-engine</artifactId><version>1.0.0</version>
</dependency>

示例代码如下:

{...// 创建TripodEngineTripodEngine tripodEngine = createTripodEngine();// 构造测试数据文档Map<String, TermEntity[]> dataMap = TripodTestHelper.createDataMap();// 匹配文档tripodEngine.match(dataMap, true);try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}
}protected static TripodEngine createTripodEngine() {List<FieldMetadata> fieldMetadatas = new LinkedList<FieldMetadata>();FieldMetadata fieldMetadata = new FieldMetadata("title", 2);fieldMetadatas.add(fieldMetadata);fieldMetadata = new FieldMetadata("content", 1);fieldMetadatas.add(fieldMetadata);/** 初始化TripodEngine,传入待处理的文档对象的字段信息,缺省字段及Idf计算辅助接口* */TripodEngine tripodEngine = new TripodEngine(fieldMetadatas, fieldMetadata,new IdfCounterImpl());// 设置引擎在匹配时计算相关度tripodEngine.setScoring(true);// 文档匹配监听器,当规则匹配文档后,通过该接口回调传回匹配结果TripodListener tripodListener = new TripodPrintListener();//    yoolerEngine//        .addYoolerRule("test", "(中办&title:中办)^2 任命 形式主义", yoolerListener);// 向引擎添加匹配规则tripodEngine.addTripodRule("test1", "\"第5代 领导\" 任命 形式主义", tripodListener);return tripodEngine;
}

示例代码的执行结果为:

test1 : 0.066580

Tripod不止支持对数据进行实时匹配,还可以向lucene一样对匹配结果进行打分。示例中的输出结果即测试数据命中匹配规则后的相关分值。Tripod支持的打分算法与lucene一致,但实现细节及数据环境有差异,所以分值不完全相同,但其表现的与匹配条件的相关趋势是一致的,在使用时需要注意。如果要了解Tripod的更多详情,可以参见链接https://github.com/colorknight/tripod。

如何用Lucene实现实时搜索--Tripod相关推荐

  1. 一种基于Lucene的实时搜索方案|淘宝技术部

    背景 阿里集团各大业务快速发展过程中都对搜索服务很多刚性的需要,而这样的搜索需求有着非常明显的特征:快速支持.低成本.实时性和稳定性. 快速支持: 业务需求急迫.需要一周甚至几天内完成索引服务搭建.测 ...

  2. Katta:基于Lucene可伸缩分布式实时搜索方案

    http://www.ij2ee.com/2011/11/29/katta%EF%BC%9A%E5%9F%BA%E4%BA%8Elucene%E5%8F%AF%E4%BC%B8%E7%BC%A9%E5 ...

  3. 基于 Lucene 的桌面文件搜索

    开源2010年,自己在学习 Lucene 时开发的一款桌面文件搜索工具,这么多年过去了,代码一直静静存放在自己的硬盘上,与其让其沉睡,不如分享出来. 这款工具带有明显的模仿 Everything 的痕 ...

  4. lucene4.5近实时搜索

    近实时搜索就是他能打开一个IndexWriter快速搜索索引变更的内容,而不必关闭writer,或者向writer提交,这个功能是在2.9版本以后引入的,在以前没有这个功能时,必须调用writer的c ...

  5. 剖析Elasticsearch集群系列第三篇 近实时搜索、深层分页问题和搜索相关性权衡之道...

    http://www.infoq.com/cn/articles/anatomy-of-an-elasticsearch-cluster-part03?utm_source=infoq&utm ...

  6. ELK学习1_开源分布式搜索平台ELK+Redis+Syslog-ng实现日志实时搜索

    Logstash + Elasticsearch + Kibana+Redis+Syslog-ng ElasticSearch是一个基于Lucene构建的开源,分布式,RESTful搜索引擎.设计用于 ...

  7. 实时搜索 elasticsearch vs solr

    oyhk学习笔记 什么是ElasticSearch? ElasticSearch是基于rest风格,分布式搜索引擎,非常优秀的lucene库.内置的JSON API提供了一个优雅的+ HTTP平台完美 ...

  8. ElasticSearch探索之路(五)集群与分片:选举、动态更新、近实时搜索、事务日志、段合并

    文章目录 集群内部原理 集群与节点 分片 选举 分片内部原理 索引不变性 动态更新索引 近实时搜索 事务日志 段合并 集群内部原理 集群与节点 一个运行中的Elasticsearch实例称为一个节点, ...

  9. 持续定义Saas模式云数据仓库+实时搜索

    简介: 本文由阿里云计算平台事业部 MaxCompute 产品经理孟硕为大家带来<持续定义Saas模式云数据仓库+实时搜索>的相关分享.以下是视频内容精华整理,主要包括以下三个部分:1.W ...

最新文章

  1. SpringCloud Alibaba微服务实战(二) - Nacos服务注册与restTemplate消费
  2. flink 三种时间机制_360深度实践:Flink 与 Storm 协议级对比
  3. 【告别信】三年了,是该离开了!
  4. DCMTK:Irradiation事件识别测试FG类
  5. Mysql limit 子查询
  6. java ajax data_jquery ajax 方法中传递的data参数,如何在java类中获取
  7. QtCreator与catkin命令两种方式开发ROS程序(图示加代码)
  8. Javaspring 7-13课 Spring Bean
  9. Photometric Stereo 光度立体三维重建(四)——光源标定
  10. 武汉大学计算机学院 考研英语,武汉大学计算机学院简介
  11. [学习报告]《LeetCode零基础指南》(第二讲) 函数
  12. 计算机考研复习资料推荐
  13. MVP模式基本用例开发
  14. 计算机知识在小学教学中的应用,计算机在小学教学中的应用
  15. 用计算机弹出音乐谱,计算器弹歌曲谱子
  16. 如何用计算机设计衣服,怎样才能成为出色的服装设计师_电脑服装设计图怎么画...
  17. Oracle - Oracle系统服务
  18. 图形学笔记 For GAMES201
  19. C实战:强大的程序调试工具GDB
  20. 除了钱,创业者还需要什么?专访明月湖创赛创投机构

热门文章

  1. 排队问题解题思路_教育随笔|数学之排队问题
  2. linux安装软件imagemagick,Linux系统中怎么安装和使用ImageMagick软件?
  3. if __name__ == __main___一文搞懂 if __name__ == #39;__main__#39;
  4. 项目背景一般写什么_项目申报整体框架规划思路,提高你的书写逻辑!
  5. python动态创建变量
  6. d soft php package,让程序飞起来之 Laravel OPcache Package
  7. microsoft visual c++全家桶_“网蓝”盒子咖啡新品来袭!顺德第①桶MINI冰摇咖啡,可以背着逛街...
  8. java 日期年度 35变2035_连接IBM MQ原因码报2035的错误解决办法
  9. python字符串反向输出_Python反向字符串– 5种方法和最佳方法
  10. timezone java_如何将Java日期转换为特定的TimeZone格式