概要
インデックステーブルの設定は、OpenSearch Vector Search Edition の最も重要な設定の 1 つです。インデックステーブルを設定するときに、元のドキュメントのデータ形式と、ドキュメント内のデータに基づいてインデックスを作成する方法を指定できます。インデックスには、転置インデックス、順方向インデックス、およびサマリーインデックスが含まれます。
インデックステーブルの設定
設定の概要
{
"table_name":"sample",
"fields":[
],
"indexs":[
],
"attributes":[
],
"summarys":{
},
"dictionaries":[
],
"adaptive_dictionaries":[
],
"enable_ttl":true,
"ttl_field_name":"ttl_filed",
"default_ttl":86400
}table_name: インデックステーブルの名前。このパラメータは、インデックステーブルを識別するために使用されます。システムは、インデックステーブル用に $table_name_schema.json という名前の設定ファイルを生成します。
fields: インデックスが作成されるフィールド。
indexs: 転置インデックスの設定。
attributes: 順方向インデックスの設定。
summarys: サマリーインデックスの設定。
dictionaries: ビットマップインデックスの作成に必要な辞書。ビットマップインデックスを作成しない場合は、このパラメータを設定する必要はありません。高頻度用語の高頻度辞書または適応辞書を作成すると、インデックススペースを削減し、検索パフォーマンスを向上させることができます。
adaptive_dictionaries: 適応ビットマップインデックスの作成に必要な辞書。高頻度用語とビットマップインデックスは、設定したルールに基づいて生成されます。必要に応じて、このパラメータを空のままにすることもできます。
file_compress: さまざまなファイル圧縮方式のパラメータとエイリアスを宣言します。これらのメソッドは、順方向、転置、およびサマリーインデックスのファイルを圧縮するために使用されます。
enable_ttl: Time To Live(TTL)機能を使用するかどうかを指定します。期限切れのデータは自動的にクリーンアップされます。デフォルト値は false です。
ttl_field_name: テーブル内で TTL が有効になっているフィールドの名前。元のドキュメントでこのフィールドが空のままになっている場合、ttl_field_name パラメータのデフォルト値が使用されます。 ttl_field_name パラメータを設定しない場合は、組み込みフィールド ops_doc_time_to_live_in_seconds が使用されます。 ttl_field_name パラメータを設定する場合、フィールドは UINT32 タイプで単一値である必要があります。
default_ttl: デフォルトの TTL。 enable_ttl パラメータが設定されていて、default_ttl パラメータが設定されていない場合は、デフォルト値 std::numeric_limits<int64_t>::max() >> 20 を使用します。 default_ttl パラメータが設定されていて、enable_ttl パラメータが設定されていない場合は、システムによって enable_ttl パラメータが自動的に true に設定されます。
fields 設定
"fileds":[
{
"field_name":"title",
"field_type":"TEXT",
"analyzer":"chn_standard"
},
{
"field_name":"dup_title",
"field_type":"TEXT",
"analyzer":"fuzzy"
"user_defined_param" : {
"copy_from" : "title"
}
},
{
"field_name":"category",
"field_type":"INTEGER",
"multi_value":true,
"compress_type":"uniq|equal"
},
{
"field_name":"mlr_features",
"field_type":"INTEGER",
"multi_value":true,
"updatable_multi_value":true
},
{
"field_name":"feature",
"field_type":"float",
"multi_value":true,
"fixed_multi_value_count":32,
"compress_type":"uniq|fp16",
"updatable_multi_value":true
},
{
"field_name":"user_id",
"field_type":"INTEGER"
},
{
"field_name":"price",
"field_type":"INTEGER",
"enable_null":true,
"default_null_string":"default_null"
},
{
"field_name":"product_id",
"field_type":"LONG"
},
{
"field_name":"product_type",
"field_type":"UINT8",
"compress_type":"equal"
},
{
"field_name":"bitwords",
"field_type":"STRING",
"multi_value":true
},
{
"field_name":"date",
"field_type":"DATE"
},
{
"field_name":"time",
"field_type":"TIME"
},
{
"field_name":"timestamp",
"field_type":"TIMESTAMP",
"default_time_zone":"+0800"
}
]field_name: フィールドの名前。
field_type: フィールドタイプ。詳細については、OpenSearch Vector Search Edition の組み込みフィールドタイプを参照してください。
analyzer: TEXT タイプのフィールドに使用されるアナライザー。アナライザーは TEXT タイプのフィールドに指定する必要がありますが、他のタイプのフィールドには指定できません。 OpenSearch Vector Search Edition でサポートされている組み込みアナライザーについては、アナライザーを参照してください。 TEXT タイプのフィールドに別のアナライザーを指定する場合は、新しいフィールドを拡張します。スキーマにフィールドを追加し、user_defined_param パラメータを設定できます。詳細については、上記のコードブロックの dup_title フィールドの設定を参照してください。
multi_value: フィールドが複数値であることを指定します。フィールドを属性として指定すると、複数値属性が指定されます。デフォルト値は false です。
updatable_multi_value: 複数値フィールドを更新できることを指定します。 STRING タイプの単一値フィールドも更新できます。デフォルト値は false です。 updatable_multi_value パラメータは、INT8、UINT8、INT16、UINT16、INTEGER(32 ビット整数)、UINT32、LONG(64 ビット整数)、UINT64、FLOAT、DOUBLE、および STRING タイプの複数値フィールドに設定できます。上記の複数値フィールドに加えて、このパラメータは STRING タイプの単一値フィールドにも設定できます。 updatable_multi_value パラメータを true に設定すると、u32offset_threshold パラメータを設定できます。 u32offset_threshold パラメータのデフォルト値は 0xFFFFFFFFL です。ほとんどの場合、このパラメータは無視できます。最大オフセットが u32offset_threshold パラメータの値を超える場合、ファイル形式は 8 バイトオフセットです。それ以外の場合、ファイル形式は 4 バイトオフセットです。
fixed_multi_value_count: フィールド内の複数の値の固定数。このフィールドが設定されている場合、属性インデックスの固定長複数値フィールドです。 INT8、INT16、INT32、INT64、UINT8、UINT16、UINT32、UINT64、FLOAT、および DOUBLE タイプのフィールドを固定長複数値属性として設定できます。 fixed_multi_value_count パラメータを設定して、STRING タイプの単一値フィールドの固定長を指定できます。このパラメータは、STRING タイプの複数値フィールドには設定できません。
compress_type: フィールドが属性として保存されるときに使用される圧縮方式。値は、uniq、equal、または uniq|equal にすることができます。このパラメータはデフォルトでは空のままです。これは、ファイルが圧縮されていないことを示します。
このパラメータを複数値属性または文字列属性に uniq に設定すると、重複が削除されて圧縮された後にデータが保存されます。このパラメータを equal に設定すると、オフセットデータに対して等値圧縮が実装されます。
INTEGER タイプの単一値属性の場合、このパラメータを uniq に設定することはできませんが、equal に設定して等値圧縮を有効にすることができます。 FLOAT または DOUBLE 浮動小数点タイプの単一値属性にも等値圧縮を設定できます。
その他の圧縮方式: FLOAT タイプの固定長複数値フィールドの場合、uniq と equal に加えて、圧縮とストレージのために精度を損なう次の圧縮方式のいずれかを選択することもできます: fp16、block_fp、および int8#[absMax]。 FLOAT タイプの単一値フィールドの場合、圧縮に fp16 または int8#[absMax] を選択することもできます。
圧縮率は、fp16 と block_fp で 50% に近くなります。 fp16 のエンコードスペースは block_fp のエンコードスペースよりもわずかに小さいですが、fp16 の精度の損失は block_fp の精度の損失よりも大きくなります。
int8#[absMax]: エンコードされた値の最大絶対値を指定する必要があります。たとえば、int8#[absMax] が int8#1.5 に設定されている場合、エンコードされた値の範囲は [-1.5, 1.5] です。圧縮後の値は初期値の 25% です。精度の損失は absMax の値に関連しています。 absMax が大きいほど、精度の損失が大きくなります。
enable_null: このフィールドで null 値を許可するかどうかを指定します。 enable_null が true の場合、インデックスに対応するフィールドを固定長複数値または単一値にすることはできず、フィールドの圧縮タイプを equal に設定することはできません。
default_null_string: null 値のリテラル値。デフォルト値は __NULL__ です。
TIMESTAMP タイプのフィールドに default_time_zone を +/-HHMM 形式で指定できます。時間は協定世界時(UTC)です。たとえば、値 +0800 は UTC+8 に対応します。デフォルトのタイムゾーンが設定されると、タイムゾーン情報のないフィールド値は、TIMESTAMP タイプのフィールドが解析されるときに、指定されたデフォルトのタイムゾーンに基づいて UTC のタイムスタンプに変換されます。フィールドがサマリーフィールドとして保存されている場合、デフォルトのタイムゾーンに基づいて表示されます。
indexs 設定
"indexs":
[
{index1},
{index2},
...
{indexn}
]indexs 設定では、インデックスのリストが設定されます。各項目は完全なインデックス設定を表します。 OpenSearch Vector Search Edition でサポートされているインデックスタイプと設定の詳細については、転置インデックスを参照してください。
attributes 設定
"attributes": [
"user_id",
"product_id",
"category"
]attributes 設定では、フィールドのリストが設定されます。これらのフィールドは fields 設定で宣言する必要があります。 TEXT タイプを除くすべてのタイプのフィールドを属性として設定できます。
注:
次のセクションでは、順方向インデックスに保存されている TIME、DATE、および TIMESTAMP タイプのフィールドの値について説明します。
DATE: 1970 年 1 月 1 日から指定された日付までの経過日数。単一値は 4 バイトで保存されます。必要に応じて、戻り値に 86,400,000(1 日の合計ミリ秒数)を掛けて、戻り値をタイムスタンプに変換できます。
TIME: 00:00:00 から指定された時刻までの経過ミリ秒数。単一値は 4 バイトで保存されます。
TIMESTAMP: 1970 年 1 月 1 日から指定されたタイムスタンプまでの経過ミリ秒数。単一値は 8 バイトで保存されます。
summarys 設定
"summarys":
{
"summary_fields":["id", "company_id", "subject", "cat_id"],
"compress":false
}summary_fields: サマリーに含まれるフィールド。すべてのタイプのフィールドをサマリーに含めることができます。フィールドは fields 設定で宣言する必要があります。
compress: zlib を使用してサマリーを圧縮するかどうかを指定します。値 true は、サマリーが圧縮されることを指定します。値 false は、サマリーが圧縮されないことを指定します。デフォルト値は false です。
dictionaries 設定
"dictionaries":[
{
"dictionary_name":"bitmap1",
"content":"a;an"
},
{
"dictionary_name":"bitmap2",
"content":"of;and"
}
]dictionary_name: 辞書の名前。
content: 辞書内のすべての用語。用語はセミコロン(;)で区切られます。
adaptive_dictionaries 設定
"adaptive_dictionaries":[
{
"adaptive_dictionary_name":"df",
"dict_type":"DOC_FREQUENCY",
"threshold":1500000
},
{
"adaptive_dictionary_name":"percent",
"dict_type":"PERCENT",
"threshold":30
},
{
"adaptive_dictionary_name":"size",
"dict_type":"INDEX_SIZE"
}
]adaptive_dictionary_name: 適応高頻度辞書を生成するためのルールの名前。
dict_type: 適応高頻度用語を生成するためのルールのタイプ。次の 3 つのタイプがサポートされています。
DOC_FREQUENCY: ドキュメント頻度(df)が指定されたしきい値以上である用語を高頻度用語として使用することを指定します。
PERCENT: df または totalDocCount に 100 を掛けた値が指定されたしきい値以上である用語を高頻度用語として使用することを指定します。
INDEX_SIZE: 用語に基づいて生成されたビットマップインデックスのサイズと元のインデックスのサイズを比較します。ビットマップインデックスのサイズが小さい場合、用語は高頻度用語として使用されます。
注:
ほとんどの場合、インデックスタームが列挙可能である場合(たとえば、用語 a、b、c など)で、転置インデックスがクエリで頻繁に照会されない場合は、dict_type パラメータを INDEX_SIZE に設定することをお勧めします。用語が列挙可能ではなく、転置インデックスが頻繁に照会される場合は、dict_type パラメータを PERCENT または DOC_FREQUENCY に設定することをお勧めします。しきい値はパフォーマンステストの結果に基づいて指定することをお勧めします。経験則に基づくしきい値は、ドキュメント総数の 5% です。たとえば、ドキュメント総数が 1,000 万の場合、DOC_FREQUENCY のしきい値を 500,000 に、PERCENT のしきい値を 5 に設定できます。