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

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存储桶中读取文件,然后对批准的文档应用过滤器,以便将它们发送到单独的路由中以进行即时提交。

<route><from uri="aws-s3://MyBucket?delay=5000&maxMessagesPerPoll=5"/><choice><when><xpath>/add/doc[@status='approved']</xpath><to uri="direct:indexAndCommit"/></when><otherwise><to uri="direct:index"/></otherwise></choice>
</route>
<route><from uri="timer://commit?fixedRate=true&period=600s"/><from uri="direct:commit"/>
</route>

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

<route id="fromDB"><from uri="jpa://com.ofbizian.pipeline.Customer?consumer.namedQuery= newCustomers&maximumResults=10&delay=5000"/><enrich uri="direct:coordinateEnricher" strategyRef="latLongAggregationStrategy"/><to uri="direct:index"/></route><route><from uri="direct:coordinateEnricher"/><setHeader headerName="CamelHttpQuery"><simple>address='${body.address}'&sensor=false</simple></setHeader><to uri="http://maps.google.com/maps/api/geocode/xml"/><setHeader headerName="lat"><xpath resultType="java.lang.Double">//result[1]/geometry/location/lat/text()</xpath></setHeader><setHeader headerName="lng"><xpath resultType="java.lang.Double">//result[1]/geometry/location/lng/text()</xpath></setHeader></route>

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

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

<route><from uri="jcr://user:pass@repository/import/inbox/signal?eventTypes=3&deep=true&synchronous=false"/><to uri="direct:index"/>
</route>

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

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

<route id="fromTwitter"><from uri="twitter://streaming/filter?type=event&keywords=productName&consumerKey={{consumer.key}}&consumerSecret={{consumer.secret}}"/><setHeader headerName="CamelHttpQuery"><language language="beanshell">"q=" + java.net.URLEncoder.encode(request.getBody().getText(), "UTF-8")</language></setHeader><throttle timePeriodMillis="1500"><constant>1</constant><to uri="http://data.tweetsentiments.com:8080/api/analyze.xml"/><setHeader headerName="sentiment"><xpath resultType="java.lang.Double">/sentiment/value/text()</xpath></setHeader><filter><simple>${in.header.sentiment} > 0</simple><to uri="direct:index"/></filter></throttle>
</route>

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

如您所见,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 数据库

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/348894.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android手机连接windows,Windows PC连接Android adb shell的方法

今天突发奇想&#xff0c;想用跟笔记本连接的键鼠操作自己的安卓设备(具体操作先挖个坑之后再填)。首先遇到的问题就是&#xff0c;如何用Windows PC连接自己的安卓设备&#xff0c;因为笔者的笔记本的USB接口有限&#xff0c;又有多部安卓设备&#xff0c;还想同时对多部Andro…

对状态代码使用JAX-RS异常

从JAX-RS资源发送特定HTTP&#xff08;错误&#xff09;状态代码的一种方法是使用javax.ws.rs.core.Response类及其类似Builder Pattern的API。 如果要根据响应主体指定返回类型&#xff0c;则仍然可以这样做&#xff0c;并通过抛出WebApplicationException针对错误发送不同的状…

设置html文字居中自动换行,CSS怎么设置文字自动换行?

CSS怎么设置文字自动换行&#xff1f;下面本篇文章就给大家介绍css设置文字(特别是连续的数字和英文)自动换行的方法。有一定的参考价值&#xff0c;有需要的朋友可以参考一下&#xff0c;希望对你们有所帮助。关于换行问题&#xff0c;正常字符的换行是比较合理的&#xff0c;…

html霓虹灯效果图,HTML5 SVG+CSS3霓虹灯文字边框动画特效

【实例简介】【实例截图】【核心代码】使用SVG CSS实现动态霓虹灯文字效果#svgBox{[/b] width:100%;margin:100px auto;}.text{font-size: 64px;font-weight: bold;text-transform: uppercase;fill: none;stroke-width: 2px;stroke-dasharray: 90 310;animation: stroke 6s inf…

动态生成的html元素无法调用js函数,如何确保动态生成的div在js函数被调用之前被加载到DOM中?...

$("#submitB").click(function() {$.post("/previewproposal", $("#proposal-form").serialize(), function(data){$.colorbox({html:data});}, "html");});呈现的HTML是这样的&#xff1a;$(document).ready(function(){function plo…

lambdas for_Java 8 Lambdas –缺少脱离Java的链接

lambdas for我学习了函数式编程&#xff0c;但是后来我决定我更喜欢命令式编程&#xff0c;于是我转回去。 —没人 从命令式编程过渡到函数式编程是当今非常普遍的事情。 互联网上的博客文章充斥着关于它的证词。 我读过的所有内容以及与我交谈过的每个人&#xff08;包括我自…

吉林省2021高考成绩排名查询,2021年吉林高考成绩排名查询系统,吉林高考位次排名表...

最近好多家长和考生留言&#xff0c;希望知道&#xff1a;吉林高考位次是什么&#xff1f;吉林高考位次与名次的区别&#xff1f;如何根据位次选大学&#xff1f;2020年吉林高考位次就是指考生高考成绩在全省同类考生中的位置。高考位次主要分为三大类&#xff1a;省市位次、区…

Picocli 2.0:类固醇上的Groovy脚本

Picocli 2.0增加了对其他JVM语言&#xff08;尤其是Groovy&#xff09;的支持。 当Groovy语言具有CliBuilder类的内置CLI支持时&#xff0c;为什么要使用picocli&#xff1f; 您可能会喜欢picocli的使用帮助&#xff0c;默认情况下会显示ANSI 颜色和样式 。 您可能喜欢的另一个…

angular字符串转成html,详解angular如何调用HTML字符串的方法

详解angular如何调用HTML字符串的方法前面的文章我们介绍过angular6.0的数据绑定&#xff0c;也就是前面页面如何调用后台的数据&#xff0c;我们接触到了调用普通数据——如&#xff1a;调用产品详情{{post.content}}。在使用中&#xff0c;我们会发现&#xff0c;如果按原来的…

西南交大计算机几个专业,西南交通大学计算机科学与技术专业

西南交通大学计算机科学与技术专业计算机科学与技术专业解读计算机科学与技术专业我校早在60年代初就创办了计算机技术专业&#xff0c;是全国较早设立该专业的高等学校之一。1978年由中科院院士曹建猷教授等主持恢复开办计算机科学及应用专业&#xff0c;1981年在国内首批获得…

模拟耗时操作_在集成测试中模拟耗时的动作

模拟耗时操作最近在我的一个项目中&#xff0c;我遇到一种情况&#xff0c;需要为该应用程序创建集成测试。 这不是很奇怪&#xff0c;不是吗&#xff1f; 有趣的是&#xff0c;应用程序的逻辑涉及一些并发问题&#xff0c;并且其中一个组件必须连接到外部服务&#xff0c;这将…

日志消息是可执行代码和注释

尽管在一个人的代码中应添加多少注释之间存在意见分歧&#xff0c;但我认为可以肯定地说&#xff0c;大多数开发人员都同意以下代码段中的注释是多余的&#xff1a; // increment the total total;在该示例中&#xff0c;代码很简单&#xff0c;并且实际上是不言自明的&#x…

代做html网页多少钱,代做排名网站有吗,做排名帮你实现财富自由

影响关键词排名的因素有哪些&#xff1a;1、影响搜索排序的因素前一段&#xff0c;我们在百度搜索排序规则中&#xff0c;实际上已经讨论过这个话题&#xff0c;其中核心的因素主要包括如下内容&#xff1a;① 网站主体与主题的权威度。② 页面内容的专业性以及多样化。③ 网站…

html flash层级,解决FLASH遮住其他层元素问题

刚做了个幻灯片广告&#xff0c;产品人员需要在第一个位置放flash&#xff0c;然后其他的都是图片&#xff0c;但是幻灯片切换到第一张的时候&#xff0c;圆圈tab元素不见了&#xff0c;只有在谷歌浏览器下面正常&#xff0c;用firebug看是被flash盖住了&#xff0c;&#xff0…

电脑没有使用计算机进入睡眠状态,电脑打不开,屏上显示:无视频输入,进入睡眠模式。怎么处理...

1、电脑能正常打开电源&#xff0c;并进行coms自检&#xff0c;但就是不能启动操作系统。光标在黑屏上闪烁&#xff0c;有提示&#xff1a;“Press any key to restar computer.”1)我碰到的这种情况解之道是检查软驱中是否有软盘。为什么要这样做呢&#xff0c;因为很多人的机…

prng伪随机数生成器_Java伪随机数生成器(PRNG)中的弱点

prng伪随机数生成器这将是Kai Michaelis&#xff0c;JrgSchwenk和我撰写的论文的总结&#xff0c;该论文在RSA Conference 2013的密码学家会议上发表 。 你可以得到我的演讲的幻灯片在这里和我们的全文在这里 。 我们对PRNG&#xff08;主要是SecureRandom&#xff09;附带的常…

时钟在微型计算机中作用,微型计算机系统中的实时时钟

实时时钟(RTC)是一种IC&#xff0c;可以跟踪当前时间。微处理器通常可以通过串行接口读取此信息&#xff0c;以方便软件执行与时间有关的功能。RTC专为超低功耗而设计&#xff0c;因为它们通常在主系统断电时仍可继续运行。这样一来&#xff0c;他们就可以根据绝对时间基准(通常…

五个使Java变得更好的功能

我偶然发现了Brian Goetz 提出的有关Java数据类的建议 &#xff0c;立即意识到我也对如何使Java更好地成为一种语言有一些想法。 我实际上有很多&#xff0c;但这只是五个最重要的列表。 专制&#xff08;2006&#xff09;&#xff0c;迈克贾奇&#xff08;Mike Judge&#xf…

nit计算机应用基础是考试大纲,NIT考试大纲--计算机应用基础.doc

NIT考试大纲--计算机应用基础.doc全国计算机应用技术证书考试大纲【 HYPERLINK "javascript:doPrint()" 打印】【字体&#xff1a; HYPERLINK "javascript:doZoom(16)" 大 HYPERLINK "javascript:doZoom(14)" 中 HYPERLINK "javascript:doZ…

html选中列表整列变色,excel选中行变色完整代码和动画效果

内容提要&#xff1a;文章介绍excel选中行变色的效果以及实现选中行变色的VBA代码。在excel中如果行数过多&#xff0c;经常核对数据的准确性&#xff0c;容易错行跳行&#xff0c;所以才有本文的小技巧&#xff1a;excel选中行变色。当我们在excel工作表中&#xff0c;鼠标随便…