このトピックでは、サードパーティコミュニティが提供するツールである solr-to-es を使用して、Solr ノードからドキュメントを Alibaba Cloud Elasticsearch インデックスに移行する方法について説明します。

準備

データを移行する前に、以下のの環境を準備します。

  • オンプレミスの Solr 環境を準備します。 このトピックでは、Solr V5.0.0 を使用しています。 他の Solr バージョンを使用する場合は、互換性テストを実行して確認してください。
  • Python をインストールします。 Python はバージョン V3.0 以降である必要があります。 このトピックでは、Python V3.6.2 を使用しています。
  • Alibaba Cloud Elasticsearch インスタンスの作成. Elasticsearchのバージョンは V6.x である必要があります。このトピックでは、Elasticsearch V6.3.2 を使用しています。
    重要 このトピックで使用しているる solr-to-esツールは、Alibaba Cloud Elasticsearch V6.x のみをサポートしています。他のバージョンを使用する場合は、互換性テストを実行して確認してください。
  • 手順 2: インスタンスの作成. このトピックでは、Alibaba Cloud ECS (Elastic Compute Service) CentOS V7.3 を使用しています。 他のオペレーティングシステムまたはバージョンを使用する場合は、互換性テストを実行して確認してください。
  • Pysolr (Python Solr クライアント) をインストールします。 クライアントのバージョンは、V3.3.3 以上、V4.0 未満である必要があります。

solr-to-es のインストール

  1. ダウンロードリンクをクリックして、solr-to-es をダウンロードします。
  2. setup.py が保存されているディレクトリを入力し、 solr-to-esをインストールするコマンド python setup.py install を実行します。
  3. solr-to-es のインストール後、以下ののコマンドを参照してドキュメントを移行します。
    python __main__.py <solr_url>:8983/solr/my_core/select http://<username>:<password>@<elasticsearch_url>:9200 elasticsearch_indexdoc_type
    表 1. パラメーター
    パラメーター 説明 
    <solr_url> Solr クラスターの完全なエンドポイントを指定します。 例:http://116.62. **. **.
    my_core 移行するドキュメントを含む Solr Core の名前に置き換えます。
    <username> Elasticsearch インスタンスのインスタンス ID を指定します。 デフォルトは elastic です。
    <password> Elasticsearch インスタンスのインスタンス ID を指定します。 通常、パスワードはインスタンスの作成時に指定されています。
    <elasticsearch_url> Alibaba Cloud Elasticsearch インスタンスのパブリックまたは内部ネットワークエンドポイントを指定します。 エンドポイントの情報は、インスタンスの[基本情報]ページで確認できます。
    elasticsearch_index ドキュメントの移行先である Elasticsearch インデックスを指定します。
    doc_type インデックスのタイプを指定します。
    重要 このトピックで説明されている環境とは異なる環境を使用している場合は、次のコマンドを実行してドキュメントを移行することができます。 詳細については、solr-to-esご参照ください。
    solr-to-es [-h] [--solr-query SOLR_QUERY] [--solr-fields COMMA_SEP_FIELDS]
    2                  [--rows-per-page ROWS_PER_PAGE] [--es-timeout ES_TIMEOUT]
    3                  solr_url elasticsearch_url elasticsearch_index doc_type

    このトピックで説明されている環境で上記のコマンドを使用すると、 -bash: solr-to-es.py: command not found エラーが返されます。

手順

次のコマンドを実行して、 my_core Solr Core、およびこれらのドキュメントを Elasticsearch インスタンスのインデックスに書き込みます。 インデックスの名前は 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: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 です。

    パラメーターについての詳細は、「表 1」をご参照ください。

  3. Alibaba Cloud Elasticsearch コンソールにログインし、Kibana コンソールへのログイン
  4. Kibana コンソールの [開発ツール] ページに表示される [コンソール] タブで次のコマンドを実行し、Elasticsearch インスタンスに elasticsearch_index が作成されていることを確認します。
    GET _cat/indices? v
  5. 次のコマンドを実行して、移行されたドキュメントに関する詳細情報を照会します。
    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
            }
          }
        ]
      }
    }