使用solr搭建搜尋伺服器

silsuer在掘金發表於2018-08-29

使用solr搭建搜尋伺服器

前言

solr 是一個用 java 寫的搜尋伺服器,支援分散式叢集部署等各種特性,現在看來應該是 目前使用範圍最廣的搜尋伺服器了

研究了三天,因為想直接部署成分散式的,網上的各種教程都是太過久遠的了,繞來繞去就死在配置檔案裡了

所以先不想做分散式的問題了,先搭一個單機版的,壓力上來了再裝zookeeper做分散式

安裝

系統為 CentOS7

  1. 新建一個專門負責搜尋服務的使用者search,將下載的solr二進位制包放在這個使用者的家目錄中,我這裡是直接把本地壓縮包扔進了伺服器中

    // 需要先建立一個專門負責搜尋服務的賬戶: search
    useradd search
     
     
    // 在search家目錄下新建服務資料夾
    mkdir /home/search/search-service
     
     
    // 將原生程式碼上傳到服務資料夾下
    scp solr-7.4.0.zip root@testing:/home/search/search-service/
    複製程式碼
  2. 解壓solr-7.4.0.zip

    // 進入目錄
    cd /home/search/search-service/
    
    
    
    // 解壓縮
    unzip solr-7.4.0.zip
    
    // 將服務許可權賦給search
    chown -R search:search /home/search/search-service/solr-7.4.0/server/
    複製程式碼
  3. 進入solr目錄

       cd solr-7.4.0/
    複製程式碼
  4. 新建 /usr/java目錄,在其中下載jdk

     http://www.oracle.com/technetwork/cn/java/javase/downloads/jdk8-downloads-2133151-zhs.html
      
      
     mkdir /usr/java
     // 我是從本地將jdk上傳到伺服器中
     scp jdk-8u181-linux-x64.tar.gz root@testing:/usr/java/
    複製程式碼
  5. 解壓縮jdk包

     cd /usr/java/   
     tar -zxvf jdk-8u181-linux-x64.tar.gz
    複製程式碼
  6. 配置環境變數

      vim /etc/profile
       
       
      // 在最後新增環境變數,其中根據jdk版本修改JAVA_HOME和JRE_HOME
      #set java environment
      JAVA_HOME=/usr/java/jdk1.8.0_181
      JRE_HOME=/usr/java/jdk1.8.0_181/jre
      CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
      PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
      export JAVA_HOME JRE_HOME CLASS_PATH PATH
    複製程式碼
  7. 讓修改生效

      source /etc/profile
    複製程式碼
  8. 驗證jdk是否安裝成功

      java -version
       
      // 如果有如下輸出,證明安裝成功
      java version "1.8.0_181"
      Java(TM) SE Runtime Environment (build 1.8.0_181-b13)
      Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)
    複製程式碼
  9. 啟動solr節點

     // 切換使用者
     su search
      
      
     // 進入solr根目錄
     cd /home/search/search-service/solr.7.4.0/
      
      
     // 啟動節點
     bin/solr start (可以使用 -p 8983 指定埠,預設是8983埠)
    複製程式碼

建立core

core是搜尋的核心,可以把它理解為集合,比如我需要搜尋使用者和帖子,那麼就需要建立兩個core:usersarticles

     bin/solr create -c users  // 索引使用者
     bin/solr create -c articles  // 索引文章
複製程式碼

進入後臺進行檢視

   // 獲得外網ip
   curl ip.gs
    
    
   // 在瀏覽器中訪問後臺
   http://ip:8983
    
    
   // 服務搭建完成後要關閉外部埠,從內網中訪問
  
複製程式碼

API

我第一個用的搜尋伺服器是 xunsearch,需要做很多配置,我以為搜素軟體都這樣...233

但是實際上solr不需要這麼麻煩,如果僅僅是單機版,簡單的搜尋配置完全可以使用http請求來設定

我們假設solr的後臺地址為: http://localhost:8983/solr

core 名為 my_collection

  • 新增索引

    • 新增單個

         curl -X POST -H 'Content-Type: application/json' 'http://localhost:8983/solr/my_collection/update/json/docs' --data-binary '
         {
           "id": "1",
           "title": "Doc 1"
         }'
      複製程式碼
    • 新增多個

       curl -X POST -H 'Content-Type: application/json' 'http://localhost:8983/solr/my_collection/update' --data-binary '
       [
         {
           "id": "1",
           "title": "Doc 1"
         },
         {
           "id": "2",
           "title": "Doc 2"
         }
       ]'
    複製程式碼
    • 要注意,僅僅新增後是無法搜尋到文件的,還需要commit才可以
  • 更新索引

      curl -X POST -H 'Content-Type: application/json' 'http://localhost:8983/solr/my_collection/update' --data-binary '
      {
        "add": {
          "doc": {
            "id": "DOC1",
            "my_field": 2.3,
            "my_multivalued_field": [ "aaa", "bbb" ]   
          }
        },
        "add": {
          "commitWithin": 5000, 
          "overwrite": false,  
          "doc": {
            "f1": "v1", 
            "f1": "v2"
          }
        },
      
        "commit": {},
        "optimize": { "waitSearcher":false },
      
        "delete": { "id":"ID" },  
        "delete": { "query":"QUERY" } 
      }'
    
    複製程式碼

    可以看到,新增、commit刪除等操作,都可以通過1次http請求來設定

  • 查詢

查詢的路徑為 http://{$url}/select?q=xxx&sort=xxx&start=xxx&rows=xxx

引數q為查詢主體,sort為排序方式,rows為查詢行數,start為查詢起始位置

例如users表中有 name欄位,

  • 我們需要查詢 namesilsuer的使用者

    那麼 引數q=name:silsuer

  • 並且按照建立時間倒序查詢

    引數q=name:silsuer&sort=created_at desc

  • 每頁查出10條資料,並且本次查第二頁

    引數start的計算方式為: start=num*(page-1) -> start=10*(2-1)=10

    引數為:q=name:silsuer&sort=created_at desc&start=10&rows=10

  • 注意:上面的引數中的空格冒號之類的,需要url編碼後使用

以上就是solr的基本用法.

相關文章