すべてのプロダクト
Search
ドキュメントセンター

:オープンソースクライアントを使用して SearchIndex に接続して使用する

最終更新日:Jan 14, 2025

LindormTable は、検索インデックスという新しい検索タイプを提供します。このトピックでは、オープンソースの HBase API と Elasticsearch API を使用して検索インデックスにアクセスし、使用する方法について説明します。

背景情報

検索インデックスは、オープンソースの HBase API をサポートする LindormTable とオープンソースの Elasticsearch API をサポートする LindormSearch の機能を統合することにより、統一されたアクセス方法を提供します。このようにして、検索インデックスを使用してさまざまな種類のクエリを実行できます。 Lindorm SQL ステートメントを実行して、検索インデックスに接続して使用できます。この標準的な方法に加えて、オープンソースクライアントを使用して検索インデックスを使用することもできます。検索インデックスの詳細については、「概要」をご参照ください。

説明

Lindorm SQL ステートメントを実行してテーブルを作成する場合は、SQL ステートメントを実行して検索インデックスを使用します。

前提条件

  • Java Development Kit(JDK)V1.8 以降がインストールされている。

  • クライアントの IP アドレスが Lindorm インスタンスのホワイトリストに追加されている。詳細については、「ホワイトリストの構成」をご参照ください。

概要

手順

SQL ステートメントを実行して検索インデックスを作成および使用する(推奨)

HBase API を使用してテーブルを作成する場合、利便性を高めるために、Lindorm SQL を使用してテーブルの検索インデックスを作成できます。この方法では、オープンソースクライアントを使用して検索インデックスを作成および使用できます。

  1. Lindorm Shell を使用して LindormTable に接続します。詳細については、「Lindorm Shell を使用して LindormTable に接続する」をご参照ください。

  2. testTable という名前のワイドテーブルを作成します。

    create 'testTable', {NAME => 'f'}
  3. Lindorm SQL を使用して、ワイドテーブルの列をインデックステーブルの列にマッピングします。

    ALTER TABLE testTable MAP DYNAMIC COLUMN f:name HSTRING;

    データ型のマッピングの詳細については、「データ型のマッピング」をご参照ください。

  4. idx という名前の検索インデックスを作成します。

    CREATE INDEX idx USING SEARCH ON testTable (f:name);
  5. testTable にデータの行を挿入します。

    put 'testTable', 'row1', 'f:name', 'foo'
    説明

    作成された検索インデックスのステータスが ACTIVE になると、ワイドテーブルに挿入されたデータはインデックステーブルに自動的に同期されます。インデックスのステータスの確認方法については、「SHOW INDEX」をご参照ください。検索インデックスが作成される前にワイドテーブルに挿入されたデータについては、ALTER INDEX ステートメントを実行して再構築する必要があります。この例では、ALTER INDEX idx ON test REBUILD; ステートメントを実行してデータを再構築できます。ステートメントでは、idx はワイドテーブルに作成された検索インデックスの名前です。詳細については、「ALTER INDEX」をご参照ください。

  6. インデックス付きデータをクエリします。

    1. LindormSearch を使用して、検索インデックステーブルのプライマリキー ID をクエリします。

      説明
      • 検索インデックステーブルの名前は、<名前空間名>.<ワイドテーブル名>.<インデックス名> の形式で連結されます。

      • 検索インデックステーブルのフィールド名は、次のルールに基づいて連結されます。

        • ワイドテーブルの列ファミリが f の場合、検索インデックステーブルのフィールド名は、ワイドテーブルの対応する列名と同じです。たとえば、ワイドテーブルの f:name 列に対応するフィールドの名前は name です。

        • ワイドテーブルの列ファミリが f でない場合、検索インデックステーブルのフィールド名は、<列ファミリ名>_<列名> の形式で連結されます。たとえば、ワイドテーブルの f1:name 列に対応するフィールドの名前は f1_name です。

      GET /default.testTable.idx/_search
      {
        "size": 10,
        "query": {
          "match": {
            "name": "foo"
          }
        }
      }

      次の結果が返されます。

      {
        "took" : 4,
        "timed_out" : false,
        "_shards" : {
          "total" : 1,
          "successful" : 1,
          "skipped" : 0,
          "failed" : 0
        },
        "hits" : {
          "total" : {
            "value" : 1,
            "relation" : "eq"
          },
          "max_score" : 1.0,
          "hits" : [
            {
              "_index" : "default.testTable.idx",
              "_id" : "726f7731",
              "_score" : 1.0,
              "_source" : {
                "update_version_l" : 1720072175536
              }
            }
          ]
        }
      }

      返された結果の _id フィールドで示されているプライマリキー ID を取得します。

    2. Lindorm Shell で次のコマンドを実行して、ワイドテーブルのデータをクエリします。SQL ステートメントを実行して検索インデックスが作成された場合、検索インデックステーブルのプライマリキー ID は、ワイドテーブルのプライマリキー ID を HEX エンコードしたものです。したがって、検索インデックステーブルのプライマリキー ID を使用してワイドテーブルのデータをクエリする場合は、プライマリキー ID を HEX 形式で指定します。詳細については、「rowkeyFormatterType」をご参照ください。

      get 'testTable', "\x72\x6f\x77\x31"

      次の結果が返されます。

      COLUMN                                         CELL
       f:name                                        timestamp=1644462597661, value=foo
      1 row(s)
      Took 0.0942 seconds

Lindorm Shell を使用して検索インデックスを作成する

  1. Lindorm Shell を使用して LindormTable に接続します。詳細については、「Lindorm Shell を使用して LindormTable に接続する」をご参照ください。

  2. Lindorm Shell で testTable という名前のワイドテーブルを作成します。

    create 'testTable', {NAME => 'f'}
  3. LindormSearch で democollection という名前の検索インデックステーブルを作成します。詳細については、「LindormSearch への接続」をご参照ください。

    説明

    特定のフィールド値を取得する必要がない場合は、リソースを節約するために _sourcefalse に設定できます。

  4. ワイドテーブルの列をインデックステーブルの列にマッピングします。たとえば、testTable テーブルの f:name 列を democollection インデックステーブルの name_s 列にマッピングします。 f:name 列では、f は列ファミリ名を指定し、name は列の名前を指定します。

    1. HBase シェルパッケージから抽出されたファイルの bin ディレクトリに、schema という名前の JSON ファイルを作成します。次のサンプルコードを JSON ファイルにコピーします。

      {
        "sourceNamespace": "default",
        "sourceTable": "testTable",
        "targetIndexName": "democollection",
        "indexType": "ES",
        "rowkeyFormatterType": "STRING",
        "fields": [
          {
            "source": "f:name",
            "targetField": "name_s",
            "type": "STRING"
          }
        ]
      }
      説明
      • マッピングで指定されたすべての列が LindormSearch で明示的に定義されており、それらの名前とデータ型が実際の列と同じであることを確認します。

      • JSON ファイルのパラメータの詳細については、「列マッピングの構成」をご参照ください。

    2. Lindorm Shell で次のコマンドを実行して、ワイドテーブルの列をインデックステーブルの列にマッピングします。

      alter_external_index 'testTable', 'schema.json'
      説明

      ワイドテーブルとインデックステーブル間の列マッピングを管理する方法の詳細については、「列マッピング関係の管理」をご参照ください。

  5. testTable にデータの行を書き込みます。ワイドテーブルとインデックステーブル間の列マッピングが構成されると、ワイドテーブルに書き込まれたデータはリアルタイムでインデックステーブルに自動的に同期されます。マッピングが構成される前にワイドテーブルに挿入されたデータについては、すべてのデータを同期するために、フルデータのインデックスを手動で作成する必要があります。詳細については、「フルデータのインデックスの作成」をご参照ください。

    put 'testTable', 'row1', 'f:name', 'foo'
  6. インデックス付きデータをクエリします。

    1. LindormSearch を使用して、検索インデックステーブルのプライマリキー ID をクエリします。

      GET /democollection/_search
      {
        "size": 10,
        "query": {
          "match": {
            "name_s": "foo"
          }
        }
      }

      次の結果が返されます。

      {
        "took" : 4,
        "timed_out" : false,
        "_shards" : {
          "total" : 1,
          "successful" : 1,
          "skipped" : 0,
          "failed" : 0
        },
        "hits" : {
          "total" : {
            "value" : 1,
            "relation" : "eq"
          },
          "max_score" : 1.0,
          "hits" : [
            {
              "_index" : "democollection",
              "_id" : "row1",
              "_score" : 1.0,
              "_source" : {
                "update_version_l" : 1720072175536
              }
            }
          ]
        }
      }

      返された結果の _id フィールドで示されているプライマリキー ID を取得します。

    2. マッピングで定義されている rowkeyFormatterType パラメーターに基づいて、検索インデックステーブルのプライマリキー ID をワイドテーブルのプライマリキー row1 に変換します。詳細については、「rowkeyFormatterType」をご参照ください。この例では、STRING メソッドを使用して、検索インデックステーブルのプライマリキー ID を変換します。そのため、検索インデックステーブルのプライマリキー ID は、ワイドテーブルのプライマリキー ID と同じです。

    3. Lindorm Shell で次のコマンドを実行して、ワイドテーブルのデータをクエリします。

      get 'testTable','row1'

      次の結果が返されます。

      COLUMN                                         CELL
       f:name                                        timestamp=1644462597661, value=foo
      1 row(s)
      Took 0.0942 seconds
  7. Lindorm Tunnel Service(LTS)Web UI でリアルタイムデータ同期タスクのステータスを表示します。ワイドテーブルとインデックステーブル間の列マッピングが構成されると、ワイドテーブルに書き込まれたデータはリアルタイムでインデックステーブルに自動的に同期されます。

    1. LTS Web UI にログオンするには、Lindorm コンソールでインスタンス ID をクリックします。左側のナビゲーションペインで、[ ワイドテーブルエンジン ] > [ Searchindex ] を選択します。 [ データ同期管理 ] セクションで、[ Clustermanager インターネット ] または [ Clustermanager VPC ] をクリックします。

    2. 左側のナビゲーションペインで、[ Lindorm Search ] > [ Solr へのリアルタイムレプリケーション ] を選択します。

      查看任务状态

      説明

      CloudMonitor コンソールでリアルタイムデータ同期のレイテンシメトリックを構成できます。最大タスクレイテンシのアラートしきい値は 600,000 ミリ秒に設定できます。詳細については、「クラウドサービスモニタリング」をご参照ください。