2015-10-04 46 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數據庫

相關問題