Lindorm は、ワイドテーブルの検索インデックスをサポートしています。 検索インデックスを作成し、マッピングを設定すると、ワイドテーブルに書き込まれたデータは LindormSearch に自動的に同期されます。 Elasticsearch API を呼び出してクエリを実行できます。 このトピックでは、Lindorm Shell を使用して検索インデックスを管理し、構造化データに対してリアルタイムクエリを実行する方法について説明します。
前提条件
Lindorm インスタンスで LindormTable が有効化されている。
Lindorm インスタンスで 検索インデックス機能 が有効になっている。
説明この検索インデックス機能は、LindormSearch と Lindorm Tunnel Service(LTS)に依存します。この機能を有効にするには、LindormSearch と LTS も有効にする必要があります。
Lindorm Shell がインストールされている。
Java 開発キット(JDK) V1.8 以降がインストールされている。
クライアント IP アドレスが Lindorm ホワイトリスト に追加されている。
手順 1:ワイドテーブルを作成する
Lindorm Shell で、HBase API を呼び出して、デフォルトの名前空間
defaultにtestTableという名前のワイドテーブルを作成し、f1という名前のカラムファミリーを定義します。create 'testTable', 'f1'
手順 2:検索インデックスを作成する
LindormSearch GUI にログインします。 次のコマンドを実行して、democollection という名前のインデックステーブルを作成します。
PUT democollection
{
"settings": {
"index.number_of_shards": 4
},
"mappings": {
"properties": {
"name_s": {"type":"keyword"}
}
}
}インデックスクエリでデータ id のみが必要で、インデックスキー列の元の値を返す必要がない場合は、mappings で "_source": {"enabled": false} を設定してリソース消費量を削減できます。コード例:
PUT democollection
{
"settings": {
"index.number_of_shards": 4
},
"mappings": {
"_source": {
"enabled": false
},
"properties": {
"name_s": {
"type": "keyword"
}
}
}
}手順 3: ワイドテーブルの列をインデックスキー列にマッピングする
ワイドテーブルの列のデータが対応する検索インデックスの列に正しく同期され、検索インデックスを介してクエリされた結果が期待どおりになるようにするには、ワイドテーブルの列を検索インデックスの列にマッピングする必要があります。この例では、ワイドテーブルの列 f1:name がインデックスキー列 name_s にマッピングされています。
解凍した Lindorm Shell フォルダの
binディレクトリにschemaという名前の JSON ファイルを作成し、次のコードを JSON ファイルにコピーします。{ "sourceNamespace": "default", "sourceTable": "testTable", "targetIndexName": "democollection", "indexType": "ES", "rowkeyFormatterType": "STRING", "fields": [ { "source": "f1:name", "targetField": "name_s", "type": "STRING" } ] }説明列マッピングのワイドテーブルとインデックステーブルの列名とデータ型が、ワイドテーブルとインデックステーブルの作成時に定義した列名とデータ型と一致していることを確認してください。
JSON ファイルのパラメーターの詳細については、「列マッピングを設定する」をご参照ください。
Lindorm Shell で次のコマンドを実行して、ワイドテーブルの列とインデックステーブルの列間のマッピングを完了します。
alter_external_index 'testTable', 'schema.json'説明ワイドテーブルの列とインデックステーブルの列間のマッピングを管理する方法の詳細については、「列マッピング関係を管理する」をご参照ください。
手順 4:ワイドテーブルにデータを書き込む
次のコードを実行して、データレコードをワイドテーブル testTable に書き込みます。
put 'testTable', 'row1', 'f1:name', 'foo'ワイドテーブルとインデックステーブル間の列マッピングが設定されると、ワイドテーブルに書き込まれたデータはリアルタイムでインデックステーブルに自動的に同期されます。ワイドテーブルの既存データを同期するには、手動で 完全データのインデックスを作成 する必要があります。
手順 5:検索インデックスを使用してデータをクエリする
インデックスデータをクエリします。
LindormSearch GUI にログインします。 Elasticsearch API を呼び出してインデックスデータをクエリし、検索インデックステーブルのプライマリキー ID を取得します。
GET /democollection/_search { "size": 10, "query": { "match": { "name_s": "foo" } } }次の結果が返されます。
{ "took": 3, "timed_out": false, "_shards": { "total": 4, "successful": 4, "skipped": 0, "failed": 0 }, "hits": { "total": { "value": 1, "relation": "eq" }, "max_score": 0.2876821, "hits": [ { "_index": "democollection", "_id": "row1", "_score": 0.2876821, "_source": { "name_s": "foo", "update_version_l": 1745397126559 } } ] } }結果から検索インデックステーブルのプライマリキー ID(
_id)を取得します。
Lindorm Shell で次のコマンドを実行して、ワイドテーブルデータをクエリします。
get 'testTable','row1'次の結果が返されます。
COLUMN CELL f1:name timestamp=1745397126559, value=foo 1 row(s)