このトピックでは、solr-to-esツールを使用して、SolrクラスターからAlibaba Cloud Elasticsearchクラスターにドキュメントを移行する方法について説明します。このツールは、サードパーティコミュニティによって提供されています。
環境の準備
- Alibaba Cloud Elasticsearch V6.Xクラスターを作成します。この例では、Elasticsearch V6.3.2クラスターを使用します。詳細については、Alibaba Cloud Elasticsearchクラスターの作成をご参照ください。重要 この例で使用されているsolr-to-esツールは、Elasticsearch V6.Xクラスターのみをサポートしています。別のバージョンのElasticsearchクラスターを使用する場合は、最初に互換性テストを実行してください。
- Elasticsearchクラスターの自動インデックス作成機能を有効にします。詳細については、YMLファイルの構成をご参照ください。
- Alibaba Cloud Elastic Compute Service(ECS)インスタンスを作成します。詳細については、手順 1:ECSインスタンスの作成をご参照ください。この例では、CentOS 7.3を実行するECSインスタンスを使用します。重要 ECSインスタンスは、Elasticsearchクラスターと同じリージョン、ゾーン、および仮想プライベートクラウド(VPC)に存在する必要があります。
- 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インスタンスに接続し、solr-to-esをダウンロードします。ECSインスタンスへの接続方法の詳細については、Workbenchを使用してSSH経由でLinuxインスタンスに接続するをご参照ください。説明 この例では、共通ユーザーを使用します。
- setup.pyが保存されているディレクトリに移動し、
sudo python setup.py installコマンドを実行してsolr-to-esをインストールします。 - 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>移行するドキュメントを含むSolrコアの名前。 <username>Elasticsearchクラスターへのアクセスに使用するユーザー名。デフォルトのユーザー名はelasticです。 <password>Elasticsearchクラスターへのアクセスに使用するパスワード。パスワードは、クラスターの作成時に指定します。 <elasticsearch_url>Elasticsearchクラスターの内部またはパブリックエンドポイント。クラスターのパブリックエンドポイントは、クラスターの[基本情報]ページから取得できます。詳細については、クラスターの基本情報の表示をご参照ください。 <elasticsearch_index>ドキュメントの移行先となるインデックスの名前。 <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 Solrコア内のすべてのドキュメントをクエリし、これらのドキュメントを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:Your password@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 V6.7クラスターのKibanaコンソールを使用します。他のバージョンのクラスターでは操作が異なる場合があります。Kibanaコンソールでの実際の操作が優先されます。
- 左側のナビゲーションペインで、[dev Tools]をクリックします。表示されるページで、[go To Work]をクリックします。
- 表示されるページの [console]タブで、次のコマンドを実行して、
elasticsearch_indexインデックスがElasticsearchクラスターに作成されているかどうかを確認します。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 } } ] } }