本文介紹通過第三方社區提供的solr-to-es工具,將Solr節點中的文檔遷移到Elasticsearch中的方法。
環境準備
建立Elasticsearch執行個體,要求版本為6.x,本文使用6.3.2 版本,詳情請參見建立Elasticsearch執行個體。
重要本文使用的solr-to-es遷移工具僅支援Elasticsearch 6.x版本,其他版本需自行測試。
開啟目標Elasticsearch的自動建立索引功能,詳情請參見配置YML參數。
建立阿里雲ECS執行個體,本文使用CentOS 7.3版本,詳情請參見步驟一:建立ECS執行個體。
重要ECS執行個體需要與阿里雲ES執行個體在同一地區和可用性區域,以及同一Virtual Private Cloud(Virtual Private Cloud)下。
在ECS上安裝Solr,本文使用5.0.0版本的Solr,詳情請參見Solr官方文檔。
在ECS上安裝Python,要求3.0及以上版本,本文使用Python 3.6.2。
在ECS上安裝PySolr,要求3.3.3及以上,4.0以下版本。
安裝solr-to-es工具
串連ECS執行個體,下載solr-to-es工具。
串連ECS執行個體的具體操作請參見通過密碼或密鑰認證登入Linux執行個體。
說明本文檔以普通使用者權限為例。
進入setup.py所在的目錄,運行
sudo python setup.py install
命令,安裝solr-to-es工具。安裝成功後,參考以下命令進行文檔遷移。
sudo python __main__.py <solr_url>:8983/solr/<my_core>/select http://<username>:<password>@<elasticsearch_url>:9200 <elasticsearch_index> <doc_type>
表 1. 參數說明 參數
說明
<solr_url>
Solr叢集的完整訪問地址。例如,http://116.62.**.**。
<my_core>
遷移文檔對應的SolrCore的名稱。
<username>
阿里雲ES的訪問使用者名稱,預設為elastic。
<password>
阿里雲ES的訪問密碼,在建立執行個體時設定。
<elasticsearch_url>
阿里雲ES執行個體的私網或外網訪問地址。可在執行個體的基本資料頁面擷取,詳情請參見查看執行個體的基本資料。
<elasticsearch_index>
待寫入的Solr文檔對應的索引名稱。
<doc_type>
對應索引的類型名稱。
重要如果您使用的是其他版本的solr-to-es工具,也可以嘗試使用如下命令進行文檔遷移,參數詳情請參見solr-to-es。
sudo 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的所有文檔,寫入到Elasticsearch執行個體中。對應的索引為elasticsearch_index
,索引類型為doc_type
。
在Solr環境中,進入solr-to-es-master/solr_to_es檔案夾下。
執行以下命令。
sudo 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
。其他參數說明請參見參數說明。
登入目標Elasticsearch執行個體的Kibana控制台,根據頁面提示進入Kibana首頁。
登入控制台的具體操作步驟請參見登入Kibana控制台。
說明本文操作以Elasticsearch 6.7版本的Kibana控制台為例,其他版本操作可能略有差別,請以實際頁面為準。
在左側導覽列,單擊Dev Tools(開發工具),再單擊Go to work。
在Console頁簽中,執行以下命令查看Elasticsearch叢集服務中是否已成功建立
elasticsearch_index
索引。GET _cat/indices?v
在Console頁簽中,執行以下命令查看遷移成功的文檔詳情。
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 } } ] } }