天天看點

【最佳實踐】Solr叢集資料遷移至Elasticsearch

Elasticsearch是一款非常強大的搜尋引擎,可以讓你在海量的資料中快速找到想要的内容。例如,代碼搜尋:可以幫助您找到相應的代碼倉庫,還可以實作代碼級的搜尋及高亮顯示;網上shopping:可以幫助您推薦商品。

除了大資料搜尋,Elasticsearch結合Logstash和Beats,還被廣泛應用在大資料實時分析領域,例如日志分析、名額監控、資訊安全等。幫助您探索海量的結構化和非結構化的資料,按需建立可視化報表、對監控資料設定報警門檻值,甚至使用機器學習技術,自動識别異常狀況、及時發出警報。

在DBRanking 2019年5月的資料庫評測中,Elasticsearch在搜尋引擎中排名第一,國内也有大量的公司在使用Elasticsearch。并且Elasticsearch在全球的下載下傳量已經超過了3.5億次。如果您需要将Solr叢集中的資料遷移至Elasticsearch,請跟着本文一步步來操作吧。

本文以

阿裡雲Elasticsearch 為例,為您示範通過第三方社群提供的solr-to-es工具,将Solr節點中的文檔遷移到阿裡雲Elasticsearch(簡稱ES)中的方法。 相容開源Elasticsearch的功能,以及Security、Machine Learning、Graph、APM等商業功能,緻力于資料分析、資料搜尋等場景服務。支援5.5.3、6.3.2、6.7.0、6.8.0和7.4.0等版本,并提供了商業插件X-Pack服務。在開源Elasticsearch的基礎上提供企業級權限管控、安全監控告警、自動報表生成等功能。阿裡雲Elasticsearch為您提供1個月的免費試用活動,單擊 此處 即可免費試用。

環境準備

  1. 建立阿裡雲ES執行個體,要求版本為6.x,本文使用6.3.2 版本,詳情請參見 建立阿裡雲Elasticsearch執行個體
    **說明:** 本文使用的solr-to-es遷移工具僅支援阿裡雲ES 6.x版本,其他版本需自行測試。
               
  2. 開啟目标阿裡雲ES的自動建立索引功能,詳情請參見 開啟自動建立索引
  3. 建立阿裡雲ECS執行個體,本文使用CentOS 7.3版本,詳情請參見 步驟一:建立ECS執行個體
    **說明:** ECS執行個體需要與阿裡雲ES執行個體在同一區域和可用區,以及同一專有網絡VPC(Virtual Private Cloud)下。
               
  4. 在ECS上安裝Solr,本文使用5.0.0版本的Solr,詳情請參見 Solr官方文檔
  5. 在ECS上安裝Python,要求3.0及以上版本,本文使用Python 3.6.2。
  6. 在ECS上安裝PySolr,要求3.3.3及以上,4.0以下版本。

安裝solr-to-es工具

  1. 連接配接ECS伺服器,下載下傳 solr-to-es工具
  2. 進入setup.py所在的目錄,運作

    python setup.py install

    指令,安裝solr-to-es工具。
  3. 安裝成功後,參考以下指令進行文檔遷移。
    python __main__.py <solr_url>:8983/solr/<my_core>/select http://<username>:<password>@<elasticsearch_url>:9200 <elasticsearch_index> <doc_type>           
|參數|說明|
|--|--|
|`<solr_url>`|Solr叢集的完整通路位址。例如,http://116.62.\*\*.\*\*。|
|`<my_core>`|遷移文檔對應的SolrCore的名稱。|
|`<username>`|阿裡雲ES的通路使用者名,預設為elastic。|
|`<password>`|阿裡雲ES的通路密碼,在建立執行個體時設定。|
|`<elasticsearch_url>`|阿裡雲ES執行個體的内網或外網通路位址。可在執行個體的基本資訊頁面擷取,詳情請參見[檢視執行個體的基本資訊](https://help.aliyun.com/document_detail/67804.html?spm=a2c4g.11186623.2.19.18a87461Jp4xKZ#task-2449896)。|
|`<elasticsearch_index>`|待寫入的Solr文檔對應的索引名稱。|
|`<doc_type>`|對應索引的類型名稱。|

**說明:** 如果您使用的是其他版本的solr-to-es工具,也可以嘗試使用如下指令進行文檔遷移,參數詳情請參見[solr-to-es](https://github.com/o19s/solr-to-es)。
           
solr-to-es [-h] [--solr-query SOLR_QUERY] [--solr-fields COMMA_SEP_FIELDS]
                 [--rows-per-page ROWS_PER_PAGE] [--es-timeout ES_TIMEOUT]
                 solr_url elasticsearch_url elasticsearch_index doc_type           
本案例使用以上指令會輸出`-bash: solr-to-es.py: command not found`的錯誤。
           

操作示例

通過以下指令,查詢名稱為

my_core

的SolrCore的所有文檔,寫入到阿裡雲ES執行個體中。對應的索引為

elasticsearch_index

,索引類型為

doc_type

  1. 在Solr環境中,進入solr-to-es-master/solr_to_es檔案夾下。
  2. 執行以下指令。
    python __main__.py 'http://116.62.**.**:8983/solr/my_core/select?q=*%3A*&wt=json&indent=true' 'http://elastic:替換密碼@es-cn-so4lwf40ubsrf****.public.elasticsearch.aliyuncs.com:9200' elasticsearch_index doc_type           
|參數|說明|
|--|--|
|`q`|Solr的查詢文法,必選,可以使用運算符。`*%3A*`表示查詢所有文檔。|
|`wt`|傳回的資料類型,支援JSON、XML、Python、Ruby、CSV等格式。|
|`indent`|傳回結果是否需要格式化展示,預設為`false`。|

其他參數說明請參見[表 1](https://help.aliyun.com/document_detail/143003.html?spm=a2c4g.11174283.6.832.4d097958P4tOeH#table-lnc-t0w-8ud)。
           
  1. 登入目标阿裡雲ES執行個體的Kibana控制台。
    登入控制台的具體操作步驟請參見[登入Kibana控制台](https://help.aliyun.com/document_detail/122668.html?spm=a2c4g.11186623.2.22.18a87461Jp4xKZ#task-761873)。
               
  2. 單擊左側導航欄的Dev Tools(開發工具),在Console中執行以下指令,檢視阿裡雲ES叢集服務中是否已成功建立

    elasticsearch_index

    索引。
    GET _cat/indices?v           
  3. 執行以下指令,檢視遷移成功的文檔詳情。
    GET /elasticsearch_index/doc_type/_search           
查詢成功後,傳回如下結果。
           
{
  "took" : 12,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : 2,
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "elasticsearch_index",
        "_type" : "doc_type",
        "_id" : "Tz8WNW4BwRjcQciJ****",
        "_score" : 1.0,
        "_source" : {
          "id" : "2",
          "title" : [
            "test"
          ],
          "_version_" : 1648195017403006976
        }
      },
      {
        "_index" : "elasticsearch_index",
        "_type" : "doc_type",
        "_id" : "Tj8WNW4BwRjcQciJ****",
        "_score" : 1.0,
        "_source" : {
          "id" : "1",
          "title" : [
            "change.me"
          ],
          "_version_" : 1648195007391203328
        }
      }
    ]
  }
}           

相關活動

更多折扣活動,請通路

阿裡雲 Elasticsearch 官網 阿裡雲 Elasticsearch 商業通用版,1核2G ,SSD 20G首月免費 阿裡雲 Logstash 2核4G首月免費
【最佳實踐】Solr叢集資料遷移至Elasticsearch
【最佳實踐】Solr叢集資料遷移至Elasticsearch