Tablestore SDK for Python を使用して検索インデックスを作成し、インデックスフィールド、プリソート、生存時間 (TTL)、仮想カラム、ハイライトを設定します。
前提条件
Tablestore SDK for Python をインストールし、クライアントを初期化していること。
最大バージョン数が 1 に設定された テーブルがあること。
テーブルの TTL が -1 に設定されている、またはテーブルで
UpdateRowによる更新が無効化されていること。
説明
create_search_index を呼び出して、テーブルの検索インデックスを作成します。テーブルには複数の検索インデックスを作成できます。リクエストでテーブル名、インデックス名、完全なインデックス設定を指定し、クエリ対象の列を fields に追加します。インデックスフィールドの型は、対応するテーブル列のデータ型と一致している必要があります。サポートされている型については、データ型をご参照ください。
create_search_index(table_name, index_name, index_meta)
検索インデックスの作成は非同期処理です。リクエストが成功した後、インデックスデータの同期が完了してからインデックスをクエリしてください。
次の例では、example_table に Keyword および Long フィールドを持つ example_index を作成します。プリソートと TTL を設定しない場合、インデックスはプライマリキーでソートされ、インデックスデータは期限切れになりません。
table_name = "example_table"
index_name = "example_index"
fields = [
FieldSchema("category", FieldType.KEYWORD, index=True),
FieldSchema("price", FieldType.LONG, index=True),
]
index_meta = SearchIndexMeta(fields)
client.create_search_index(table_name, index_name, index_meta)
パラメーター
create_search_index では、次のパラメーターを使用できます。
|
名前 |
タイプ |
説明 |
|
table_name (必須) |
|
テーブル名。 |
|
index_name (必須) |
|
検索インデックス名。 |
|
index_meta (必須) |
|
検索インデックスの設定。 |
インデックス設定
index_meta は SearchIndexMeta 型で、次のパラメーターを使用できます。
|
名前 |
タイプ |
説明 |
|
fields (必須) |
|
インデックスフィールド。 |
|
index_setting (任意) |
|
インデックス設定。 |
|
index_sort (任意) |
|
プリソートの設定。このパラメーターを設定せず、かつインデックスに Nested フィールドが含まれていない場合、データはプライマリキーでソートされます。Nested インデックスはプリソートをサポートしていません。 |
|
time_to_live (任意) |
|
インデックスデータの TTL (秒)。デフォルト値:-1。値は -1 または 86400 以上の整数である必要があります。-1 を指定すると、インデックスデータは期限切れになりません。別の値を指定する場合は、テーブルで |
インデックスフィールド
index_meta.fields[] の各要素は FieldSchema 型で、次のパラメーターを使用できます。
|
名前 |
タイプ |
説明 |
|
field_name (必須) |
|
インデックスフィールド名。このフィールドは、プライマリキー列または属性列に対応できます。 |
|
field_type (必須) |
|
インデックスフィールドの型。多層の論理関係には Nested、JSON 形式のデータには JSON、地理座標には Geo-point を使用します。 |
|
index (任意) |
|
フィールドに対して転置インデックスまたは空間インデックスを作成するかどうかを指定します。デフォルト値: |
|
enable_highlighting (任意) |
|
サマリーとハイライトを有効にするかどうかを指定します。この機能は、テキストフィールドでのみサポートされています。デフォルト値は |
|
analyzer (任意) |
|
テキストフィールドの アナライザー。このパラメーターを設定しない場合は、単文字分割が使用されます。 |
|
analyzer_parameter (任意) |
|
アナライザーのパラメーター。 |
|
enable_sort_and_agg (任意) |
|
並べ替えと集計を有効にするかどうかを指定します。デフォルト値: |
|
is_array (任意) |
|
フィールドが配列であるかどうかを指定します。デフォルト値: |
|
sub_field_schemas (任意) |
|
Nested または JSON フィールドの子フィールド。このパラメーターは Nested フィールドと JSON フィールドでは必須です。 |
|
is_virtual_field (任意) |
|
フィールドが仮想列であるかどうかを指定します。デフォルト値: |
|
source_fields (任意) |
|
仮想カラムにマッピングされるソーステーブルのフィールド。このパラメーターは仮想カラムでは必須です。サポートされるソースフィールドは 1 つのみです。 |
|
date_formats (任意) |
|
Date フィールドでサポートされる日付形式。このパラメーターは Date フィールドでは必須です。 |
|
vector_options (任意) |
|
ベクトルフィールドのベクトルデータ型、次元、距離メトリック。このパラメーターはベクトルフィールドでは必須です。 |
|
json_type (任意) |
|
JSON インデックスタイプ。有効な値は |
|
text_similarity (任意) |
|
テキストフィールドの類似度アルゴリズム。有効な値は |
ベクトル設定
index_meta.fields[].vector_options は VectorOptions 型で、次のパラメーターを使用できます。
|
名前 |
タイプ |
説明 |
|
data_type (必須) |
|
ベクトルデータ型。 |
|
dimension (必須) |
|
ベクトルの次元。最大値: 4096。 |
|
metric_type (必須) |
|
距離メトリックです。有効な値は、 |
インデックス設定
index_meta.index_setting は IndexSetting 型で、次のパラメーターを使用できます。
|
名前 |
タイプ |
説明 |
|
routing_fields (任意) |
|
カスタムルーティングフィールド。1 つ以上のプライマリキー列を指定できます。通常は 1 列を指定します。複数列を指定した場合は、値が連結されます。ルーティングフィールド値が同一のレコードは、同一のデータパーティションに書き込まれます。 |
プリソートの設定
index_meta.index_sort は Sort 型で、次のパラメーターを使用できます。
|
名前 |
タイプ |
説明 |
|
sorters (必須) |
|
事前ソート ルール。 |
プライマリキーソート
index_meta.index_sort.sorters[] 内の PrimaryKeySort 型の要素は、主キーでデータをソートし、次のパラメーターを提供します。
|
名前 |
タイプ |
説明 |
|
sort_order (任意) |
|
ソート順。有効な値: |
フィールド値ソート
index_meta.index_sort.sorters[] の FieldSort タイプの要素は、フィールド値でデータをソートし、以下のパラメーターを提供します。
|
名前 |
タイプ |
説明 |
|
field_name (必須) |
|
フィールド名。 |
|
sort_order (任意) |
|
ソート順。有効な値: |
|
sort_mode (任意) |
|
フィールドに複数の値が含まれる場合に、ソートに使用する値。 |
例
プリソートの設定
次の例では、created_at フィールドでインデックスデータを昇順に事前にソートします。
table_name = "example_table"
index_name = "example_index"
fields = [
FieldSchema("category", FieldType.KEYWORD, index=True),
FieldSchema(
"created_at",
FieldType.LONG,
index=True,
enable_sort_and_agg=True,
),
]
index_sort = Sort([FieldSort("created_at", SortOrder.ASC)])
index_meta = SearchIndexMeta(fields, index_sort=index_sort)
client.create_search_index(table_name, index_name, index_meta)
インデックス TTL の設定
次の例では、インデックスの TTL を 7 日に設定します。
table_name = "example_table"
index_name = "example_index"
fields = [
FieldSchema("category", FieldType.KEYWORD, index=True),
FieldSchema("price", FieldType.LONG, index=True),
]
index_meta = SearchIndexMeta(fields, time_to_live=7 * 24 * 60 * 60)
client.create_search_index(table_name, index_name, index_meta)
トークン化の設定
次の例では、テキストフィールド description の分割トークン化を設定し、区切り文字としてコンマ (,) を使用します。
table_name = "example_table"
index_name = "example_index"
fields = [
FieldSchema("category", FieldType.KEYWORD, index=True),
FieldSchema(
"description",
FieldType.TEXT,
index=True,
analyzer=AnalyzerType.SPLIT,
analyzer_parameter=SplitAnalyzerParameter(","),
),
]
index_meta = SearchIndexMeta(fields)
client.create_search_index(table_name, index_name, index_meta)
ベクトルフィールドの作成
次の例では、embedding という名前の 4次元ベクトルフィールドを作成し、ドット積を使用してベクトル類似度を測定します。
table_name = "example_table"
index_name = "example_index"
fields = [
FieldSchema("category", FieldType.KEYWORD, index=True),
FieldSchema(
"embedding",
FieldType.VECTOR,
index=True,
vector_options=VectorOptions(
data_type=VectorDataType.VD_FLOAT_32,
dimension=4,
metric_type=VectorMetricType.VM_DOT_PRODUCT,
),
),
]
index_meta = SearchIndexMeta(fields)
client.create_search_index(table_name, index_name, index_meta)
仮想カラムの作成
次の例では、キーワードフィールド category を Long 型の仮想列に、Long フィールド price を Keyword 型の仮想列にマッピングします。
table_name = "example_table"
index_name = "example_index"
fields = [
FieldSchema("category", FieldType.KEYWORD, index=True),
FieldSchema(
"category_as_long",
FieldType.LONG,
index=True,
is_virtual_field=True,
source_fields=["category"],
),
FieldSchema("price", FieldType.LONG, index=True),
FieldSchema(
"price_as_keyword",
FieldType.KEYWORD,
index=True,
is_virtual_field=True,
source_fields=["price"],
),
]
index_meta = SearchIndexMeta(fields)
client.create_search_index(table_name, index_name, index_meta)
ハイライトの有効化
次の例では、テキストフィールド description のハイライトを有効にします。
table_name = "example_table"
index_name = "example_index"
fields = [
FieldSchema("category", FieldType.KEYWORD, index=True),
FieldSchema("price", FieldType.LONG, index=True),
FieldSchema(
"description",
FieldType.TEXT,
index=True,
enable_highlighting=True,
),
]
index_meta = SearchIndexMeta(fields)
client.create_search_index(table_name, index_name, index_meta)