1. 程式人生 > >solr單機版、叢集版整合spring

solr單機版、叢集版整合spring

一、引言

今個起個大早,陽光依舊耀眼,趕緊把solr剩下未完成的結束掉。solr單機版、叢集版咱們都已經搭建好了,之前solr單機版也使用java中的solrj來維護索引庫,那麼今天講下solr叢集版怎麼使用solr來維護索引庫,以及solr整合spring框架。

首先solr需要使用的jar,引入進來!

     <!-- solr客戶端 -->
     <dependency>
        <groupId>org.apache.solr</groupId>
        <artifactId>solr-solrj</artifactId>
        <version>4.10.3</version>
     </dependency>

二、使用solrj維護solr叢集索引庫

  /**
     * 新增、修改文件
     * @throws Exception
     */
    @Test
    public void addDocment() throws Exception {

        //建立solr連線
        //單機版
        //SolrServer server = new HttpSolrServer("http://111.231.123.81:8080/solr");

        //叢集版
        //zhHost表示zookeeper的叢集地址
        String zkHost = "111.231.110.123:2181,111.231.110.123:2182,111.231.110.123:2183";
        CloudSolrServer server = new CloudSolrServer(zkHost);
        //設定預設Collection
        server.setDefaultCollection("collection1");

        //以下操作都是一致的,刪除,查詢相同道理,只是連線方式不同

        //建立一個文件物件
        SolrInputDocument document = new SolrInputDocument();
        //如果需要修改,即id一致即可
        //item_title、item_price、item_desc這些欄位都是之前新增的業務欄位
        document.addField("id","001");
        document.addField("item_title","iPhone XS Max");
        document.addField("item_price","9599");
        document.addField("item_desc","iPhone XS Max 支援雙卡,給你更多選擇,為工作、生活都帶來更多便利5。這兩款 iPhone 還都提供最高達 512GB 的儲存容量,給你更廣闊的施展空間。另外,就算它們電量...");
        //把文件寫入索引庫
        server.add(document);
        //提交操作
        server.commit();
    }

三、整合spring

步驟一applicationContext-solrj.xml,新建配置檔案,寫入如下配置。${SOLR.SERVER.URL}、${SOLR.zkHost.URL}、${SOLR.DEFAULTCOLLECTION},這些相對應的值小編放在properties配置檔案中了,也可以直接寫固定。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <!-- 配置SolrServer物件 -->
    <!-- 單機版 -->
    <!--<bean id="httpSolrServer" class="org.apache.solr.client.solrj.impl.HttpSolrServer">
        <constructor-arg name="baseURL" value="${SOLR.SERVER.URL}"></constructor-arg>
    </bean>-->

     <!-- 叢集版 -->
    <bean id="cloudSolrServer" class="org.apache.solr.client.solrj.impl.CloudSolrServer">
        <constructor-arg name="zkHost" value="${SOLR.zkHost.URL}"></constructor-arg>
        <property name="defaultCollection" value="${SOLR.DEFAULTCOLLECTION}"></property>
    </bean>

</beans>

步驟二java中使用,直接使用spring註解,@Autowired注入SolrServer。 SolrServer是HttpSolrServer、CloudSolrServer的父類,所以如果需要切換叢集版,只需要把單機版配置檔案註釋掉即可。不需要修改程式碼。

public interface SearchDao {

    /**
     * solr查詢是根據SolrQuery物件來的,所以引數是SolrQuery
     * @param solrQuery
     * @return
     * @throws Exception
     */
    SearchResult getSearchList(SolrQuery solrQuery) throws Exception;
}
@Repository
public class SearchDaoImpl implements SearchDao {

    
    @Autowired
    private SolrServer solrServer;


    public Object getSearchList(SolrQuery solrQuery) throws Exception{
          //根據專案的需求,具體實現,小編只是演示怎麼使用
          return null;
    }
}