centos7安裝及使用solr7.4

一、準備環境

1、一臺linux服務器(Centos7)
2、安裝jdk8環境 

3、準備solr7.8安裝包

二、安裝(我這裏使用的是solr自帶的應用容器,也可以集成到tomcat)

1)從官網下載最新solr

wget http://mirrors.shuosc.org/apache/lucene/solr/7.4.0/solr-7.4.0.tgz

2)解壓,安裝

tar -zxvf solr-7.2.0.tgz

3)相關命令

bin/solr stop -all 		關閉solr服務
bin/solr start -force 		開啓solr服務
bin/solr status			查看solr服務狀態

三、使用solr

1、點擊Core Admin

這裏寫圖片描述

2、按照步驟去創建,然後點擊確認會出現

這裏寫圖片描述

3、這個錯誤是因爲找不到對應的配置文件,進入server/solr/configsets/_default/直接把裏面的conf 複製到 你新建的core中 你新建的core在server/solr目錄下

命令如下: 
1、進入到server/solr/configsets/_default下

cd /usr/local/install/solr7.4.0/server/solr/configsets/_default/

2、然後複製到新建的test中

cp -r conf /usr/local/install/solr7.4.0/server/solr/test/

3、到這兒core已創建好,相應的操作可以去網上尋找,我在這就不詳細說明

三、連接mysql數據庫

1)首先處理jar

mysql-connector-java-x.x.x.jar    solr-dataimporthandler-extras-5.1.0.jar    solr-dataimporthandler-7.1.0.jar 

拷貝到 solr\server\solr-webapp\webapp\WEB-INF\lib 下

1)配置連接信息

找到你新建的 core 下的solrconfig.xml文件(solrconfig.xml 文件所在目錄是: solr\server\solr\test\conf),打開找到第一個requestHandler,在他下面加入如下內容

<requestHandler name="/dataimport"
     class="org.apache.solr.handler.dataimport.DataImportHandler"> 
       <lst name="defaults"> 
          <str name="config">data-config.xml</str> 
       </lst> 
</requestHandler>

再在你創建的core目錄的conf下創建data-config.xml文件,內容如下

<?xml version="1.0" encoding="UTF-8"?>
<dataConfig>
    <dataSource type="JdbcDataSource"
                driver="com.mysql.jdbc.Driver"
                url="jdbc:mysql://192.168.1.105:3306/solr"
                user="root"
                password="root" />
    <document>
        <entity name="person" query="select * from user">
            <field column="ID" name="id" />
            <field column="name" name="name" />
            <field column="passward" name="passward" />
        </entity>
    </document>
</dataConfig>

        dataSource不多說,一看就明白,

        entity --代表數據庫表,column--代表數據庫表字段,name--代表solr中字段名

        (注意:創建這個文件的時候第一行不能有空格或者空行,否則報錯)

在managed-schema文件中添加對應於數據庫字段的field,建議在 solr 可視化界面操作。當然,一定要手動修改 managed-schema 文件也不是不可以,但是每次更改完需要重新加載 Core,或者粗暴一點直接重新啓動solr也可以。那麼,直接修改 managed-schema 文件的。到這裏你應該能聯繫上數據庫了,也可以導入數據了。

三、在java中的應用

 <dependency>
            <groupId>org.apache.solr</groupId>
            <artifactId>solr-solrj</artifactId>
            <version>5.3.1</version>
</dependency>
一個測試小例子:
package com.hzl.admin.api.test;

import com.hzl.admin.core.entity.User;
import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.impl.HttpSolrClient;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.common.SolrDocument;
import org.apache.solr.common.SolrDocumentList;
import org.apache.solr.common.SolrInputDocument;

import java.io.IOException;
import java.util.List;

public class SolrTest {

    //指定solr服務器的地址
    private final static String SOLR_URL = "http://192.168.1.253:8983/solr/";

    /**
     * 創建SolrServer對象
     * <p>
     * 該對象有兩個可以使用,都是線程安全的
     * 1、CommonsHttpSolrServer:啓動web服務器使用的,通過http請求的
     * 2、 EmbeddedSolrServer:內嵌式的,導入solr的jar包就可以使用了
     * 3、solr 4.0之後好像添加了不少東西,其中CommonsHttpSolrServer這個類改名爲HttpSolrClient
     *
     * @return
     */
    public HttpSolrClient createSolrServer() {
        HttpSolrClient solr = null;
        solr = new HttpSolrClient(SOLR_URL);
        return solr;
    }


    /**
     * 往索引庫添加文檔
     *
     * @throws IOException
     * @throws SolrServerException
     */
    public void addDoc() throws SolrServerException, IOException {
        //構造一篇文檔
        SolrInputDocument document = new SolrInputDocument();
        //往doc中添加字段,在客戶端這邊添加的字段必須在服務端中有過定義
        document.addField("id", "8");
        document.addField("name", "周新星");
        document.addField("password", "646456");
        //獲得一個solr服務端的請求,去提交  ,選擇具體的某一個solr core
        HttpSolrClient solr = new HttpSolrClient(SOLR_URL + "test");
        solr.add(document);
        solr.commit();
        solr.close();
    }


    /**
     * 根據id從索引庫刪除文檔
     */
    public void deleteDocumentById() throws Exception {
        //選擇具體的某一個solr core
        HttpSolrClient server = new HttpSolrClient(SOLR_URL + "test");
        //刪除文檔
        server.deleteById("1");
        //刪除所有的索引
        //solr.deleteByQuery("*:*");
        //提交修改
        server.commit();
        server.close();
    }

    /**
     * 查詢
     *
     * @throws Exception
     */
    public void querySolr() throws Exception {
        HttpSolrClient solrServer = new HttpSolrClient(SOLR_URL + "test/");
        SolrQuery query = new SolrQuery();
        // 下面設置solr查詢參數
        // 參數q  查詢所有
        // query.set("q", "*:*");
        // 相關查詢,比如某條數據某個字段含有周、星、馳三個字  將會查詢出來 ,這個作用適用於聯想查詢
         query.set("q", "name:ha~ OR password:ha~");

        // 參數fq, 給query增加過濾查詢條件
        // id爲0-4
        query.addFilterQuery("id:[32 TO 65]");

        // 給query增加布爾過濾條件
        // query.addFilterQuery("description:演員");  // description字段中含有“演員”兩字的數據

        // 參數df,給query設置默認搜索域
        query.set("df", "name");

        // 參數sort,設置返回結果的排序規則
        query.setSort("id", SolrQuery.ORDER.desc);

        // 設置分頁參數
        query.setStart(0);
        // 每一頁多少值
        query.setRows(10);

        // 參數hl,設置高亮
        query.setHighlight(true);
        // 設置高亮的字段
        query.addHighlightField("name");
        // 設置高亮的樣式
        query.setHighlightSimplePre("<font color='red'>");
        query.setHighlightSimplePost("</font>");

        // 獲取查詢結果
        QueryResponse response = solrServer.query(query);
        // 兩種結果獲取:得到文檔集合或者實體對象

        // 查詢得到文檔的集合
        SolrDocumentList solrDocumentList = response.getResults();
        System.out.println("通過文檔集合獲取查詢的結果");
        System.out.println("查詢結果的總數量:" + solrDocumentList.getNumFound());
        // 遍歷列表
        for (SolrDocument doc : solrDocumentList) {
            System.out.println("id:" + doc.get("id") + "   name:" + doc.get("name") + "    password:" + doc.get("password"));
        }

        // 得到實體對象
        List<User> tmpLists = response.getBeans(User.class);
        if (tmpLists != null && tmpLists.size() > 0) {
            System.out.println("通過文檔集合獲取查詢的結果");
            for (User per : tmpLists) {
                System.out.println("id:" + per.getId() + "   name:" + per.getUserName() + "    password:" + per.getPassword());
            }
        }
    }

    public static void main(String[] args) throws Exception {
        SolrTest solr = new SolrTest();
        //solr.createSolrServer();
//        solr.addDoc();
//        solr.deleteDocumentById();
        solr.querySolr();
    }

}

到這裏,你應該有點興奮了,經過努力實現了簡單運用solr。後續考慮在tomcat運行,實現定時增量導入,以及在java中更詳盡的應用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章