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

OpenSearch:インデックステーブルを設定する

最終更新日:Dec 28, 2024

概要

インデックステーブルの設定は、OpenSearch 検索エンジン版における最も重要な設定の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 パラメーターが設定されていない場合、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 検索エンジン版の組み込みフィールドタイプを参照してください。

  • analyzer: TEXT タイプのフィールドに使用されるアナライザー。 TEXT タイプのフィールドには、アナライザーを指定する必要があります。他のタイプのフィールドには、アナライザーを指定できません。 OpenSearch 検索エンジン版でサポートされている組み込みアナライザーについては、アナライザーを参照してください。 TEXT タイプのフィールドに別のアナライザーを指定する場合は、新しいフィールドを拡張します。スキーマにフィールドを追加し、user_defined_param パラメーターを設定できます。詳細については、上記のコードブロックの dup_title フィールドの設定を参照してください。

  • multi_value: フィールドが複数値であることを指定します。フィールドを属性として指定すると、複数値属性が指定されます。デフォルト値は false です。

  • updatable_multi_value: 複数値フィールドを更新できることを指定します。 STRING タイプの単一値フィールドも更新できます。デフォルト値は false です。 INT8、UINT8、INT16、UINT16、INTEGER(32 ビット整数)、UINT32、LONG(64 ビット整数)、UINT64、FLOAT、DOUBLE、および STRING タイプの複数値フィールドに updatable_multi_value パラメーターを設定できます。上記の複数値フィールドに加えて、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 検索エンジン版でサポートされているインデックスタイプと設定の詳細については、転置インデックスの概要を参照してください。

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 に設定することをお勧めします。