热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

camel_使用Camel在来自不同来源的Solr中索引数据

camelApacheSolr是建立在Lucene之上的“流行的,快速的开源企业搜索平台”。为了进行搜索(并查找结果),通常需要从不同的源(例如内容管理
camel

camel

Apache Solr是建立在Lucene之上的“流行的,快速的开源企业搜索平台”。 为了进行搜索(并查找结果),通常需要从不同的源(例如内容管理系统,关系数据库,旧系统)中提取数据,这是您最初的要求……然后,还要保持索引符合最新要求。通过添加新数据,更新现有记录,删除过时数据来确定日期。 新数据源可能与初始数据源相同,但也可能是Twitter,AWS或其余端点之类的数据源。

Solr可以理解不同的文件格式,并提供大量的数据选项索引:

  1. 直接HTTP和远程流传输–通过发布用于直接索引的文件或用于远程流传输的文件路径,允许您通过HTTP与Solr进行交互。
  2. DataImportHandler –是一个模块,可从关系数据库或文件系统中同时导入增量增量和增量增量。
  3. SolrJ –一个使用Apache Commons HTTP Client访问Solr的Java客户端。

但是在现实生活中,用数百万个文档,数十个转换,过滤,内容丰富,复制,并行处理来索引来自不同来源的数据不仅需要更多。 解决这种挑战的一种方法是重新发明轮子:编写少量自定义应用程序,将它们与一些脚本结合起来或运行cronjobs。 另一种方法是使用一种灵活的工具,该工具设计为可配置和可插入的,可以帮助您轻松扩展和分配负载。 这样的工具是Apache Camel,它现在也具有Solr连接器。

一切始于几个月前,在Sourcesense的大本营期间,我和我的同事Alex在这里尝试不同的项目,以实现将数据索引到Solr中的管道。 不出所料,我们发现了Camel,经过几天的配对,我们准备了Solr组件的初始版本,该组件致力于Camel,并由Ben Oday进一步扩展了。 目前,它具有功能齐全的Solr连接器,该连接器在后台使用SolrJ,并允许您:配置SolrServer和StreamingUpdateSolrServer的所有参数; 支持以下操作:insert,add_bean,delete_by_id,delete_by_query,commit,rolback,optimize; 索引文件,SolrInputDocument实例,具有批注或单个消息头的Bean。

创建一个骆驼路线来索引关系数据库表和本地文件系统中的所有数据很简单:

public void configure() {
from("timer://clear?repeatCount=1").to("direct:clearIndex");from("file:src/data?noop=true").to("direct:insert");from("timer://database?repeatCount=1").to("sql:select * from products?dataSourceRef=productDataSource").split(body()).process(new SqlToSolrMapper()).to("direct:insert");from("direct:insert").setHeader(SolrConstants.OPERATION, constant(SolrConstants.OPERATION_INSERT)).to(SOLR_URL).setHeader(SolrConstants.OPERATION, constant(SolrConstants.OPERATION_COMMIT)).to(SOLR_URL);from("direct:clearIndex").setHeader(SolrConstants.OPERATION, constant(SolrConstants.OPERATION_DELETE_BY_QUERY)).setBody(constant("*:*")).to(SOLR_URL).setHeader(SolrConstants.OPERATION, constant(SolrConstants.OPERATION_COMMIT)).to(SOLR_URL);
}

上面的方法将首先删除所有文档,然后再提交,以清除索引。 然后它将开始从src / data文件夹轮询文件,读取每个文件并将其发送到Solr端点。 假设文件采用Solr可以理解的格式,则将对它们进行索引并提交。 第三条路线将从数据库(在内存中)检索所有产品,将它们分成单独的记录,将每个记录映射到Solr字段,然后进行摘要。 幸运的是,在2012年,软件开发人员的生活并不那么简单。 如今,取而代之的是,更现实的索引要求将由以下内容组成:

如果文件获得批准,请尽快提交,否则每10分钟提交一次。

骆驼如何为您提供帮助? 骆驼支持包括S3在内的大多数流行的Amazon API。 使用aws-s3组件,可以从S3存储桶中读取文件,然后对批准的文档应用过滤器,以便将它们发送到单独的路由中以进行即时提交。

/add/doc[@status='approved']


通过调用XXX外部服务来丰富经纬度的地址数据,以促进Solr中的空间搜索。

address='${body.address}'&sensor=false//result[1]/geometry/location/lat/text()//result[1]/geometry/location/lng/text()

上面的路线一次从“客户”表10记录中读取数据,并且每个路线都将使用“客户地址”字段调用google的maps API以获取经度和纬度。 使用XPath从响应中提取坐标,然后将其合并回Customer对象。 很简单,不是吗。

3.在我们的内容管理系统中,此/那个/路径下的内容编入索引,并监视更新。


Camel有一个jcr连接器,使您可以在任何Java内容存储库中创建内容。 CAMEL-5155中还提交了一项改进,该改进将允许尽快读取JCR v.2支持存储库中的内容。 如果幸运的话,并且您的CMS支持CMIS,则可以出于相同目的使用来自github的camel-cmis连接器。

4.聆听有关我们产品/公司的推文,进行情感分析,并仅索引积极的推文。

"q=" + java.net.URLEncoder.encode(request.getBody().getText(), "UTF-8")1/sentiment/value/text()${in.header.sentiment} > 0

这条路线将使用Twitter的实时a​​pi侦听tweet,对tweet进行url编码,并调用tweetsentiments API进行情感分析。 另外,它将应用节流,因此每秒钟最多只能发出一个请求,因为每秒的呼叫数受到限制。 然后,该路由将在应用索引之前应用过滤器以忽略所有否定推文。

如您所见,Camel可以轻松地与许多不同的系统(包括Solr)进行交互,即使您有非常自定义的应用程序,编写连接器也并不困难。 但这只是故事的一方面。 另一方面,Camel实施了企业集成模式的完整列表,这些列表对于任何严重的数据摄取管道都是必需的:路由器,转换器,过滤器,拆分器,聚合器,Content Enricher,负载均衡器…最后但并非最不重要的:异常处理,记录,监视,DSL……两个词:骆驼岩!

PS :示例的完整源代码可以在我的github帐户上找到。

参考:使用来自OFBIZian博客的JCG合作伙伴Bilgin Ibryam的Camel在来自不同来源的Solr中建立索引数据。

翻译自: https://www.javacodegeeks.com/2013/03/indexing-data-in-solr-from-disparate-sources-using-camel.html

camel



推荐阅读
  • 本文介绍了在mac环境下使用nginx配置nodejs代理服务器的步骤,包括安装nginx、创建目录和文件、配置代理的域名和日志记录等。 ... [详细]
  • 怎么在PHP项目中实现一个HTTP断点续传功能发布时间:2021-01-1916:26:06来源:亿速云阅读:96作者:Le ... [详细]
  • 基于Socket的多个客户端之间的聊天功能实现方法
    本文介绍了基于Socket的多个客户端之间实现聊天功能的方法,包括服务器端的实现和客户端的实现。服务器端通过每个用户的输出流向特定用户发送消息,而客户端通过输入流接收消息。同时,还介绍了相关的实体类和Socket的基本概念。 ... [详细]
  • 本文介绍了Android中的assets目录和raw目录的共同点和区别,包括获取资源的方法、目录结构的限制以及列出资源的能力。同时,还解释了raw目录中资源文件生成的ID,并说明了这些目录的使用方法。 ... [详细]
  • tomcat的log文件夹下有以下几种日志:1、catalina.YYYY-MM-DD.logcatalina引擎输出的日志;catalina是tomc ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • 解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法
    本文介绍了解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法,包括检查location配置是否正确、pass_proxy是否需要加“/”等。同时,还介绍了修改nginx的error.log日志级别为debug,以便查看详细日志信息。 ... [详细]
  • mac php错误日志配置方法及错误级别修改
    本文介绍了在mac环境下配置php错误日志的方法,包括修改php.ini文件和httpd.conf文件的操作步骤。同时还介绍了如何修改错误级别,以及相应的错误级别参考链接。 ... [详细]
  • 本文介绍了Swing组件的用法,重点讲解了图标接口的定义和创建方法。图标接口用来将图标与各种组件相关联,可以是简单的绘画或使用磁盘上的GIF格式图像。文章详细介绍了图标接口的属性和绘制方法,并给出了一个菱形图标的实现示例。该示例可以配置图标的尺寸、颜色和填充状态。 ... [详细]
  • Android工程师面试准备及设计模式使用场景
    本文介绍了Android工程师面试准备的经验,包括面试流程和重点准备内容。同时,还介绍了建造者模式的使用场景,以及在Android开发中的具体应用。 ... [详细]
  • OAuth2.0指南
    引言OAuth2.0是一种应用之间彼此访问数据的开源授权协议。比如,一个游戏应用可以访问Facebook的用户数据,或者一个基于地理的应用可以访问Foursquare的用户数据等。 ... [详细]
  • 一、概述nmon是一种在AIX与各种Linux操作系统上广泛使用的监控与分析工具,相对于其它一些系统资源监控工具来说,nmon所记录的信息是比较全面的 ... [详细]
  • 一、设置时区方法一:使用setup工具setup选择Timezoneconfiguration选择AsiaShanghai空格键勾选上System ... [详细]
author-avatar
___周麗
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有