使用solr搭建搜索服務器

使用solr搭建搜索服務器

前言

solr 是一個用 java 寫的搜索服務器,支持分佈式集羣部署等各類特性,如今看來應該是 目前使用範圍最廣的搜索服務器了html

研究了三天,由於想直接部署成分佈式的,網上的各類教程都是太太久遠的了,繞來繞去就死在配置文件裏了java

因此先不想作分佈式的問題了,先搭一個單機版的,壓力上來了再裝zookeeper作分佈式linux

安裝

系統爲 CentOS7apache

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

    // 須要先創建一個專門負責搜索服務的帳戶: 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.zipvim

    // 進入目錄
    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目錄,在其中下載jdkbash

    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. 配置環境變量oracle

    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的基本用法.

相關文章
相關標籤/搜索