オープンソースの solr-to-es ツールを使用して、Solr コアから Alibaba Cloud Elasticsearch インデックスへドキュメントを移行します。
solr-to-es は Elasticsearch V6.X クラスターのみをサポートしています。対象クラスターが異なるバージョンを実行している場合は、続行前に互換性テストを実行してください。
前提条件
開始する前に、以下の条件を満たしていることを確認してください。
-
Alibaba Cloud Elasticsearch V6.X クラスター(自動インデックス作成 が有効化済み)。本例では V6.3.2 を使用します。セットアップ手順については、「Alibaba Cloud Elasticsearch クラスターの作成」および「YML ファイルの設定」をご参照ください。
-
Elastic Compute Service (ECS) インスタンス(Elasticsearch クラスターと同一の リージョン、ゾーン、および仮想プライベートクラウド (VPC) 内で実行中)。本例では CentOS 7.3 を使用します。セットアップ手順については、「ステップ 1:ECS インスタンスの作成」をご参照ください。
-
ECS インスタンスに Solr がインストール済み(本例では Solr 5.0.0 を使用)。詳細については、公式 Solr ドキュメントをご参照ください。
-
ECS インスタンスに Python 3.0 以降がインストール済み(本例では Python 3.6.2 を使用)。
-
ECS インスタンスに pysolr 3.3.3 以降(ただし 4.0 より前)がインストール済み。
solr-to-es のインストール
-
ECS インスタンスに接続します。接続手順については、「パスワードまたはキーペアによる Linux インスタンスへの接続」をご参照ください。
本例では一般ユーザーアカウントを使用します。
-
solr-to-es をダウンロードし、
setup.pyが格納されているディレクトリに移動します。 -
solr-to-es をインストールします。
sudo python setup.py install
ドキュメントの移行
すべての移行コマンドは、以下の構造に従います:Solr クエリ URL、認証情報を含む Elasticsearch エンドポイント、対象インデックス名、およびインデックスタイプを指定します。
Solr コアから Elasticsearch インデックスへドキュメントを移行するには、以下のコマンドを実行します。
sudo 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> |
移行対象ドキュメントを含む Solr コアの名称 | my_core |
<username> |
ご利用の Elasticsearch クラスターのユーザー名(デフォルトは elastic) |
elastic |
<password> |
クラスター作成時に設定したパスワード | — |
<elasticsearch_url> |
ご利用の Elasticsearch クラスターの内部エンドポイントまたはパブリックエンドポイント。この情報は、クラスターの 基本情報 ページで確認できます。詳細については、「クラスターの基本情報を表示」をご参照ください。 | es-cn-****.elasticsearch.aliyuncs.com |
<elasticsearch_index> |
対象インデックスの名称 | elasticsearch_index |
<doc_type> |
インデックスのタイプ | 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: コマンドが見つかりません
例
本例では、my_core Solr コア内のすべてのドキュメントをクエリし、それらをご利用の Elasticsearch クラスター内の elasticsearch_index インデックスに書き込みます。
-
ECS インスタンスで、
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:Your password@es-cn-so4lwf40ubsrf****.public.elasticsearch.aliyuncs.com:9200' elasticsearch_index doc_typeこのコマンドで使用される Solr クエリ URL のパラメーターは以下のとおりです。
パラメーター 説明 q必須。Solr 標準クエリ構文を使用したクエリ式。 *%3A*はすべてのドキュメントに一致します。wt応答フォーマット。サポートされる値: json、xml、python、ruby、csv。indent読みやすさのために応答をインデントするかどうか。デフォルト値: false。その他のパラメーターについては、「ドキュメントの移行」セクションをご参照ください。
-
ご利用の Elasticsearch クラスターの Kibana コンソールにログインします。ログイン手順については、「Kibana コンソールへのログイン」をご参照ください。
本例では Elasticsearch V6.7 クラスターの Kibana コンソールを使用します。他のバージョンでは手順が異なる場合があります。
-
左側ナビゲーションウィンドウで、Dev Tools をクリックし、次に Go to work をクリックします。
-
Console タブで、以下のコマンドを実行して、
elasticsearch_indexインデックスが作成されたことを確認します。GET _cat/indices?v -
以下のコマンドを実行して、移行されたドキュメントを表示します。
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 エンドポイントを指すようにします。
-
検索クエリが期待通りの結果を返すことを検証します。
-
自動インデックス作成が不要になった場合は、意図しないインデックス作成を防ぐため、無効化してください。手順については、「YML ファイルの設定」をご参照ください。