2015-10-04 94 views
1

我读到了Apache Solr和Spring Batch。 Apache Solr是强大的搜索技术。现在,我们要从Apache Solr读取数据,然后Spring Batch将处理该数据并写入数据库。是否可以将Apache Solr与Spring Batch集成?

我搜索了很多,但我无法得到关于这个integrartion的演示。 是否可以将Apache Solr与Spring Batch集成?

+0

你能描述一下你的用例吗?你在Solr中搜索某些东西,然后将结果发送到批处理来处理它,对吗? – Mysterion

+0

嗨Mysterion,我通过使用以下配置导入Apace Solr中的MySQL数据库。 <数据源类型= “JdbcDataSource” 驱动= “com.mysql.jdbc.Driver” URL = “JDBC:MySQL的://本地主机:3306/spring_batch_example” 用户= “根” 密码= “根”/ >

+0

它是问题的重要组成部分,请在此处添加它,而不是在评论中 – Mysterion

回答

0

我真的不知道Apache Solr实现,但是从它的网站介绍:

的Solr是一个REST API像一个独立的企业搜索服务器。 您可以通过HTTP以二进制格式通过JSON,XML,CSV或 将文档放在其中(称为“索引”)。您可以通过HTTP GET查询并接收JSON,XML,CSV 或二进制结果。

所以,一个可能的解决办法是写一个自定义ItemWriter它通过HTTP GET查询你的Solr服务器并返回结果为POJO(或一个简单的字符串)。然后,您可以在自定义阅读器,处理器(optionnal)和JBDC Writer中使用经典的“块”。

1

我们已经完成了一个基于spring批处理的应用程序,该应用程序在solr云上进行索引,这相当于Solr“数据导入请求处理程序”。

步骤1:从数据库中读取

<bean id="itemReader" class="org.springframework.batch.item.database.JdbcPagingItemReader" scope="step"> 
     <property name="dataSource" ref="mysqlDataSource"/> 
     <property name="queryProvider"> 
      <bean class="org.springframework.batch.item.database.support.MySqlPagingQueryProvider"> 
      </bean> 
     </property> 
     <property name="rowMapper"> 
     <bean class="implement org.springframework.jdbc.core.RowMapper"> 
     <!-- public Object mapRow(ResultSet rs, int rowNum) throws SQLException { 
     return SolrInputDocument } 
     --> 
      </bean> 
     </property> 
    </bean> 

步骤2:处理所读取的数据

<bean id="intermediateProcessor" class="our.own.intermediate.Processer" scope="step"> 
    </bean> 

步骤3:写/后数据到Apache Solr实现

<bean id="solrItemWriter" class="our.own.writer.SolrItemWriter" scope="step"> 
    <property name="solrServer" ref="solrServer"/> 
</bean> 

<bean id="solrServer" class="org.apache.solr.client.solrj.impl.CloudSolrServer" destroy-method="shutdown" > 
    <constructor-arg index="0"><value>solr cloud zookeeper host</value></constructor-arg> 
    <constructor-arg index="1"><value>false</value></constructor-arg> 
</bean> 

    import org.apache.solr.client.solrj.SolrServer; 
    import org.apache.solr.client.solrj.response.UpdateResponse; 
    import org.apache.solr.common.SolrInputDocument;  
    public class SolrItemWriter implements ItemWriter { 
     @Override 
     public void write(List items) throws Exception { 
      for (Object object : items) { 
       SolrInputDocument solrInputDocument = (SolrInputDocument) object; 
       UpdateResponse response = solrServer.add(solrInputDocument); 
      } 
      UpdateResponse commitResponse = solrServer.commit(); 

     } 
    } 

我不知道我的答案会对你有所帮助,因为你的问题对要求不太清楚。为什么你想从apache solr读取数据并将其写入mysql数据库