`CreateSearchIndex` メソッドを使用して、データテーブルの多次元インデックスを作成します。1 つのデータテーブルに複数の多次元インデックスを作成できます。多次元インデックスを作成する際、クエリ対象のフィールドをインデックスに追加します。カスタムルーティングキーや事前ソートなどの高度なオプションも設定できます。
前提条件
Tablestore クライアントが初期化されていること。詳細については、「Tablestore クライアントの初期化」をご参照ください。
次の条件を満たすデータテーブルが作成済みであること:
バージョンの最大数が 1 であること。
生存時間 (TTL) が -1 であるか、テーブルの更新が無効になっていること。
注意事項
パラメーター
多次元インデックスを作成する際、テーブル名 (`table_name`)、多次元インデックス名 (`index_name`)、およびインデックススキーマ (`schema`) を指定します。スキーマには、フィールドスキーマ (`field_schemas`)、インデックス設定 (`index_setting`)、およびインデックス事前ソート設定 (`index_sort`) が含まれます。次の表に、これらのパラメーターを説明します。
コンポーネント | 説明 |
table_name | データテーブルの名前。 |
index_name | 多次元インデックスの名前。 |
field_schemas | `field_schema` オブジェクトのリスト。各 `field_schema` には次のパラメーターが含まれます:
|
index_setting | インデックス設定。`routing_fields` 設定が含まれます。 routing_fields (任意):カスタムルーティングフィールド。一部のプライマリキー列をルーティングフィールドとして選択できます。通常、設定する必要があるのは 1 つだけです。複数のルーティングキーを設定した場合、システムはそれらの値を連結して 1 つの値にします。 |
index_sort | インデックス事前ソート設定。`sorters` 設定が含まれます。これを設定しない場合、データはデフォルトでプライマリキーによってソートされます。 説明 Nested フィールドを含むインデックスは indexSort をサポートしていません。事前ソートは実行されません。 sorters (必須):インデックスの事前ソート方法。プライマリキーまたはフィールド値でソートできます。ソートの詳細については、「ソートとページング」をご参照ください。
|
例
多次元インデックス作成時にアナライザを指定する
次の例では、多次元インデックスを作成する際にアナライザを指定する方法を示します。多次元インデックスには、k (Keyword)、t (Text)、g (Geopoint)、ka (Keyword 配列)、la (Long 配列)、n (Nested) の 6 つのフィールドが含まれています。n フィールドには、nk (Keyword)、nl (Long)、nt (Text) の 3 つのサブフィールドがあります。
def create_search_index(client):
# Keyword フィールド。インデックスを作成し、統計集約を有効にします。
field_a = FieldSchema('k', FieldType.KEYWORD, index=True, enable_sort_and_agg=True)
# Text フィールド。インデックスを作成し、1文字トークン化を使用します。
field_b = FieldSchema('t', FieldType.TEXT, index=True, analyzer=AnalyzerType.SINGLEWORD)
# Text フィールド。インデックスを作成し、あいまいトークン化を使用します。
#field_b = FieldSchema('t', FieldType.TEXT, index=True, analyzer=AnalyzerType.FUZZY,analyzer_parameter=FuzzyAnalyzerParameter(1, 6))
# Text フィールド。インデックスを作成し、カスタム区切り文字 (カンマ) を使用してトークン化します。
#field_b = FieldSchema('t', FieldType.TEXT, index=True, analyzer=AnalyzerType.SPLIT, analyzer_parameter = SplitAnalyzerParameter(","))
# Geopoint フィールド。インデックスを作成します。
field_c = FieldSchema('g', FieldType.GEOPOINT, index=True)
# Keyword 配列フィールド。インデックスを作成します。
field_d = FieldSchema('ka', FieldType.KEYWORD, index=True, is_array=True)
# Long 配列フィールド。インデックスを作成します。
field_e = FieldSchema('la', FieldType.LONG, index=True, is_array=True)
# 3 つのサブフィールド (nk (Keyword)、nl (Long)、nt (Text)) を含む Nested フィールド。
field_n = FieldSchema('n', FieldType.NESTED, sub_field_schemas=[
FieldSchema('nk', FieldType.KEYWORD, index=True),
FieldSchema('nl', FieldType.LONG, index=True),
FieldSchema('nt', FieldType.TEXT, index=True),
])
fields = [field_a, field_b, field_c, field_d, field_e, field_n]
index_setting = IndexSetting(routing_fields=['PK1'])
index_sort = None # 多次元インデックスに Nested フィールドが含まれている場合、インデックスの事前ソートは設定できません。
#index_sort = Sort(sorters=[PrimaryKeySort(SortOrder.ASC)])
index_meta = SearchIndexMeta(fields, index_setting=index_setting, index_sort=index_sort)
client.create_search_index('<TABLE_NAME>', '<SEARCH_INDEX_NAME>', index_meta)多次元インデックスを作成し、ベクトルフィールドを設定する
次の例では、多次元インデックスを作成する方法を示します。多次元インデックスには、col_keyword (Keyword)、col_long (Long)、col_vector (Vector) の 3 つのフィールドが含まれています。ベクトルフィールドの距離計算アルゴリズムはドット積です。
def create_search_index(client):
index_meta = SearchIndexMeta([
FieldSchema('col_keyword', FieldType.KEYWORD, index=True, enable_sort_and_agg=True), # 文字列型
FieldSchema('col_long', FieldType.LONG, index=True), # 数値型
FieldSchema("col_vector", FieldType.VECTOR, # ベクトル型
vector_options=VectorOptions(
data_type=VectorDataType.VD_FLOAT_32,
dimension=4, # ベクトルディメンションは 4 で、類似度アルゴリズムはドット積です。
metric_type=VectorMetricType.VM_DOT_PRODUCT
)),
])
client.create_search_index(table_name, index_name, index_meta)多次元インデックス作成時にまとめとハイライトを有効にする
次の例では、多次元インデックスを作成する際にまとめとハイライトを有効にする方法を示します。多次元インデックスには、k (Keyword)、t (Text)、n (Nested) の 3 つのフィールドが含まれています。n フィールドには、nk (Keyword)、nl (Long)、nt (Text) の 3 つのサブフィールドがあります。t フィールドと n フィールドの nt サブフィールドで、まとめとハイライト機能が有効になっています。
def create_search_index0905(client):
# Keyword フィールド。インデックスを作成し、統計集約を有効にします。
field_a = FieldSchema('k', FieldType.KEYWORD, index=True, enable_sort_and_agg=True)
# Text フィールド。インデックスを作成し、1文字トークン化を使用し、フィールドのまとめとハイライトを有効にします。
field_b = FieldSchema('t', FieldType.TEXT, index=True, analyzer=AnalyzerType.SINGLEWORD,
enable_highlighting=True)
# 3 つのサブフィールド (nk (Keyword)、nl (Long)、nt (Text)) を含む Nested フィールド。nt サブカラムでまとめとハイライト機能が有効になっています。
field_n = FieldSchema('n', FieldType.NESTED, sub_field_schemas=[
FieldSchema('nk', FieldType.KEYWORD, index=True),
FieldSchema('nl', FieldType.LONG, index=True),
FieldSchema('nt', FieldType.TEXT, index=True, enable_highlighting=True),
])
fields = [field_a, field_b, field_n]
index_setting = IndexSetting(routing_fields=['id'])
index_sort = None # 多次元インデックスに Nested フィールドが含まれている場合、インデックスの事前ソートは設定できません。
# index_sort = Sort(sorters=[PrimaryKeySort(SortOrder.ASC)])
index_meta = SearchIndexMeta(fields, index_setting=index_setting, index_sort=index_sort)
client.create_search_index('pythontest', 'pythontest_0905', index_meta)よくある質問
関連ドキュメント
多次元インデックスを作成した後、term クエリ、terms クエリ、match all クエリ、match クエリ、match phrase クエリ、prefix クエリ、range クエリ、wildcard クエリ、geo クエリ、Boolean クエリ、ベクトル検索、nested クエリ、カラム存在クエリなど、さまざまなクエリタイプを使用して多次元データクエリを実行できます。
データをクエリする際、結果セットに対してソートとページング、ハイライト、またはcollapse (重複排除) 操作を実行することもできます。
多次元インデックスを作成した後、さまざまな管理操作を実行できます。これらの操作には、ライフサイクル管理、スキーマの動的変更、多次元インデックスのリスト表示、多次元インデックス記述のクエリ、多次元インデックスの削除などがあります。
最大値や最小値の検索、合計の計算、行数のカウントなどのデータ分析を実行するには、統計集約機能またはSQL クエリ機能を使用できます。
結果セット全体の順序が重要でない場合にデータを迅速にエクスポートするには、並列スキャン機能を使用できます。