手机网站html声明,北京公司注册费用,深圳企业网站建设电话,厦门建设局公维金网站Apache Solr是建立在Lucene之上的“流行的#xff0c;快速的开源企业搜索平台”。 为了进行搜索#xff08;并查找结果#xff09;#xff0c;通常需要从不同的来源#xff08;例如内容管理系统#xff0c;关系数据库#xff0c;旧系统#xff09;中提取数据#xff0… Apache Solr是建立在Lucene之上的“流行的快速的开源企业搜索平台”。 为了进行搜索并查找结果通常需要从不同的来源例如内容管理系统关系数据库旧系统中提取数据这是您最初的要求……然后还要保持索引的最高难度。通过添加新数据更新现有记录删除过时数据来确定日期。 新数据源可能与初始数据源相同但也可能是TwitterAWS或其余端点之类的数据源。 Solr可以理解不同的文件格式并提供大量的数据选项 索引 直接HTTP和远程流传输–通过发布用于直接索引的文件或用于远程流传输的文件路径允许您通过HTTP与Solr进行交互。 DataImportHandler –是一个模块可从关系数据库或文件系统中同时导入增量增量和增量增量。 SolrJ –一个使用Apache Commons HTTP Client访问Solr的Java客户端。 但是在现实生活中用数百万个文档数十个转换过滤内容丰富复制并行处理来索引来自不同来源的数据不仅需要更多。 解决这种挑战的一种方法是重新发明轮子编写少量自定义应用程序将它们与一些脚本结合起来或运行cronjobs。 另一种方法是使用一种灵活的工具该工具设计为可配置和可插入的可以帮助您轻松扩展和分配负载。 这样的工具是Apache Camel它现在也具有Solr 连接器 。 一切始于几个月前在Sourcesense的大本营期间我和我的同事Alex在这里尝试不同的项目以实现将数据索引到Solr中的管道。 不出所料我们发现了Camel经过几天的配对我们已经准备好将最初的Solr组件版本提交给Camel并由Ben Oday进行了进一步扩展。 目前它具有功能齐全的Solr连接器该连接器在后台使用SolrJ并允许您配置SolrServer和StreamingUpdateSolrServer的所有参数 支持以下操作insertadd_beandelete_by_iddelete_by_querycommitrolbackoptimize 索引文件SolrInputDocument实例具有批注或单个消息头的Bean。 创建一个骆驼路线来索引关系数据库表和本地文件系统中的所有数据很简单 public void configure() {
from(timer://clear?repeatCount1).to(direct:clearIndex);from(file:src/data?nooptrue).to(direct:insert);from(timer://database?repeatCount1).to(sql:select * from products?dataSourceRefproductDataSource).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存储桶中读取文件然后对批准的文档应用过滤器以便将它们发送到单独的路由中以进行即时提交。 routefrom uriaws-s3://MyBucket?delay5000maxMessagesPerPoll5/choicewhenxpath/add/doc[statusapproved]/xpathto uridirect:indexAndCommit//whenotherwiseto uridirect:index//otherwise/choice
/route
routefrom uritimer://commit?fixedRatetrueperiod600s/from uridirect:commit/
/route通过调用XXX外部服务来丰富经纬度的地址数据以方便在Solr中进行空间搜索。 route idfromDBfrom urijpa://com.ofbizian.pipeline.Customer?consumer.namedQuery newCustomersmaximumResults10delay5000/enrich uridirect:coordinateEnricher strategyReflatLongAggregationStrategy/to uridirect:index//routeroutefrom uridirect:coordinateEnricher/setHeader headerNameCamelHttpQuerysimpleaddress${body.address}sensorfalse/simple/setHeaderto urihttp://maps.google.com/maps/api/geocode/xml/setHeader headerNamelatxpath resultTypejava.lang.Double//result[1]/geometry/location/lat/text()/xpath/setHeadersetHeader headerNamelngxpath resultTypejava.lang.Double//result[1]/geometry/location/lng/text()/xpath/setHeader/route 上面的路线一次从“客户”表10记录中读取数据并且每条路线都将使用客户地址字段调用google的maps API来获取经度和纬度。 使用XPath从响应中提取坐标然后将其合并回Customer对象。 很简单不是吗。 3.在我们的内容管理系统中此/那个/路径下的内容编入索引并监视更新。 routefrom urijcr://user:passrepository/import/inbox/signal?eventTypes3deeptruesynchronousfalse/to uridirect:index/
/route Camel有一个jcr连接器使您可以在任何Java内容存储库中创建内容。 CAMEL-5155中还提交了一项改进该改进将允许很快从JCR v.2支持存储库中读取内容。 如果幸运的话并且您的CMS支持CMIS则可以出于相同目的使用来自github的camel-cmis连接器。 4.聆听有关我们产品/公司的推文进行情感分析并仅索引积极的推文。 route idfromTwitterfrom uritwitter://streaming/filter?typeeventkeywordsproductNameconsumerKey{{consumer.key}}consumerSecret{{consumer.secret}}/setHeader headerNameCamelHttpQuerylanguage languagebeanshellq java.net.URLEncoder.encode(request.getBody().getText(), UTF-8)/language/setHeaderthrottle timePeriodMillis1500constant1/constantto urihttp://data.tweetsentiments.com:8080/api/analyze.xml/setHeader headerNamesentimentxpath resultTypejava.lang.Double/sentiment/value/text()/xpath/setHeaderfiltersimple${in.header.sentiment} 0/simpleto uridirect:index//filter/throttle
/route 这条路线将使用Twitter的实时api侦听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