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

OpenSearch:ベクトルインデックス

最終更新日:Dec 28, 2024

概要

ベクトルベースの検索メカニズムは、商品データとコンテンツデータをベクトルの形式で表現し、ベクトルインデックスライブラリを構築します。ベクトルインデックスライブラリ内の1つ以上のユーザーベクトルまたは商品ベクトルを指定して、ベクトル距離に基づいて商品またはコンテンツのトップkリストを取得できます。

ベクトルインデックスを設定するためのサンプルコード

カテゴリなしでベクトルインデックスを設定する

{
  "table_name": "test_vector",
  "summarys": {
    "summary_fields": [
      "id",
      "vector_field"
    ]
  },
  "indexs": [
    {
      "index_name": "pk",
      "index_type": "PRIMARYKEY64",
      "index_fields": "id",
      "has_primary_key_attribute": true,
      "is_primary_key_sorted": false
    },
    {
      "index_name": "embedding",
      "index_type": "CUSTOMIZED",
      "index_fields": [
        {
          "boost": 1,
          "field_name": "id"
        },
        {
          "boost": 1,
          "field_name": "vector_field"
        }
      ],
      "indexer": "aitheta2_indexer",
      "parameters": {
        "enable_rt_build": "false",
        "min_scan_doc_cnt": "20000",
        "vector_index_type": "Qc",
        "major_order": "col",
        "builder_name": "QcBuilder",
        "distance_type": "SquaredEuclidean",
        "embedding_delimiter": ",",
        "enable_recall_report": "false",
        "is_embedding_saved": "false",
        "linear_build_threshold": "5000",
        "dimension": "128",
        "search_index_params": "{\"proxima.qc.searcher.scan_ratio\":0.01}",
        "searcher_name": "QcSearcher",
        "build_index_params": "{\"proxima.qc.builder.quantizer_class\":\"Int8QuantizerConverter\",\"proxima.qc.builder.quantize_by_centroid\":true,\"proxima.qc.builder.optimizer_class\":\"BruteForceBuilder\",\"proxima.qc.builder.thread_count\":10,\"proxima.qc.builder.optimizer_params\":{\"proxima.linear.builder.column_major_order\":true},\"proxima.qc.builder.store_original_features\":false,\"proxima.qc.builder.train_sample_count\":3000000,\"proxima.qc.builder.train_sample_ratio\":0.5}"
      }
    }
  ],
  "attributes": [
    "id",
    "vector_field"
  ],
  "fields": [
    {
      "field_name": "id",
      "field_type": "INTEGER"
    },
    {
      "user_defined_param": {
        "multi_value_sep": ","
      },
      "field_name": "vector_field",
      "field_type": "FLOAT",
      "multi_value": true
    }
  ]
}

カテゴリを使用してベクトルインデックスを設定する

{
  "table_name": "test_vector",
  "summarys": {
    "summary_fields": [
      "id",
      "vector_field",
      "category_id"
    ]
  },
  "indexs": [
    {
      "index_name": "pk",
      "index_type": "PRIMARYKEY64",
      "index_fields": "id",
      "has_primary_key_attribute": true,
      "is_primary_key_sorted": false
    },
    {
      "index_name": "embedding",
      "index_type": "CUSTOMIZED",
      "index_fields": [
        {
          "boost": 1,
          "field_name": "id"
        },
        {
          "field_name": "category_id",
          "boost": 1
        },
        {
          "boost": 1,
          "field_name": "vector_field"
        }
      ],
      "indexer": "aitheta2_indexer",
      "parameters": {
        "enable_rt_build": "false",
        "min_scan_doc_cnt": "20000",
        "vector_index_type": "Qc",
        "major_order": "col",
        "builder_name": "QcBuilder",
        "distance_type": "SquaredEuclidean",
        "embedding_delimiter": ",",
        "enable_recall_report": "false",
        "is_embedding_saved": "false",
        "linear_build_threshold": "5000",
        "dimension": "128",
        "search_index_params": "{\"proxima.qc.searcher.scan_ratio\":0.01}",
        "searcher_name": "QcSearcher",
        "build_index_params": "{\"proxima.qc.builder.quantizer_class\":\"Int8QuantizerConverter\",\"proxima.qc.builder.quantize_by_centroid\":true,\"proxima.qc.builder.optimizer_class\":\"BruteForceBuilder\",\"proxima.qc.builder.thread_count\":10,\"proxima.qc.builder.optimizer_params\":{\"proxima.linear.builder.column_major_order\":true},\"proxima.qc.builder.store_original_features\":false,\"proxima.qc.builder.train_sample_count\":3000000,\"proxima.qc.builder.train_sample_ratio\":0.5}"
      }
    }
  ],
  "attributes": [
    "id",
    "vector_field",
    "category_id"
  ],
  "fields": [
    {
      "field_name": "id",
      "field_type": "INTEGER"
    },
    {
      "user_defined_param": {
        "multi_value_sep": ","
      },
      "field_name": "vector_field",
      "field_type": "FLOAT",
      "multi_value": true
    },
    {
      "field_name": "category_id",
      "field_type": "INTEGER"
    }
  ]
}
重要
  • カテゴリは、カテゴリに基づいてベクトルを検索できるようにするために導入されています。たとえば、画像は異なるカテゴリに属します。カテゴリを使用してベクトルインデックスを構築せず、取得したベクトルのみをフィルタリングする場合、結果は返されない可能性があります。

  • 管理者としてベクトルインデックスを設定する場合、build_index_paramsパラメーターとsearch_index_paramsパラメーターの値のエスケープ文字を削除する必要があります。

パラメーターの説明

  • field_name:ベクトルインデックスの構築に使用されるフィールド。フィールドはRAWデータ型である必要があります。このパラメーターには少なくとも2つのフィールドを指定する必要があります。1つのフィールドはINTEGERデータ型の主キーまたは主キーのハッシュ値である必要があります。もう1つのフィールドは、ベクトルを含むフィールドである必要があります。カテゴリに基づいてベクトルインデックスを構築する場合、カテゴリフィールドを追加できます。フィールド型はRAWで、フィールド値はINTEGERデータ型です。indexパラメーターのフィールドの順序は、fieldsパラメーターと同じ方法で設定する必要があります。カテゴリフィールドが存在する場合、順序は主キーフィールド、カテゴリフィールド、ベクトルフィールドの順序である必要があります。

  • index_name:ベクトルインデックスの名前。

  • index_type:ベクトルインデックスのタイプ。このパラメーターの値をCUSTOMIZEDに設定します。

  • indexer:ベクトルインデックスの構築に使用するプラグイン。このパラメーターの値をaitheta2_indexeに設定します。

  • parameters:ベクトルインデックスのビルダーとサーチャーを設定するために使用されるパラメーター。

    • dimension:次元数。

    • embedding_delimiter:ベクトルの区切り文字。デフォルトでは、ベクトルの区切り文字はカンマ(,)です。

    • distance_type:距離のタイプ。有効な値:

      • InnerProduct:内積。

      • SquaredEuclidean:ユークリッド距離の2乗。正規化されたデータにはSquaredEuclideanを指定します。

    • major_order:データの格納方法。有効な値:

      • col:データに列ストアを使用します。major_orderパラメーターをcolに設定する場合、dimensionパラメーターを2のn乗に設定する必要があります。nは正の整数である必要があります。列ストアを使用する場合、システムパフォーマンスは行ストアを使用する場合よりも優れています。

      • row:データに行ストアを使用します。これはデフォルト値です。

    • builder_name:ベクトルインデックスに使用するビルダーのタイプ。このパラメーターを次のいずれかの値に設定することをお勧めします。その他のパラメーター値については、テクニカルサポートにお問い合わせください。

      • QcBuilder

      • LinearBuilder:インデックスを順番に構築します。ドキュメント数が10,000未満の場合は、builder_nameパラメーターをLinearBuilderに設定することをお勧めします。

    • searcher_name:ベクトルインデックスに使用するサーチャーのタイプ。searcher_nameパラメーターの値は、builder_nameパラメーターの値と一致する必要があります。GPUリソースを使用する場合は、テクニカルサポートにお問い合わせください。

      • QcSearcher:CPUを使用して検索を実行します。builder_nameパラメーターがQcBuilderに設定されている場合は、searcher_nameパラメーターをQcSearcherに設定します。

      • LinearSearcher:CPUを使用して全文検索を実行します。builder_nameパラメーターがLinearBuilderに設定されている場合は、searcher_nameパラメーターをLinearSearcherに設定します。

    • build_index_params:builder_nameパラメーターに指定したビルダータイプに設定するパラメーター。詳細については、量子化クラスタリングの設定を参照してください。

    • search_index_params:searcher_nameパラメーターに指定したサーチャータイプに設定するパラメーター。詳細については、HNSW設定を参照してください。

    • linear_build_threshold:LinearBuilderを使用しない操作のしきい値。ドキュメント数が指定されたしきい値未満の場合、システムはLinearBuilderとLinearSearcherを使用します。LinearBuilderはメモリ使用量を削減し、ロスレス検索結果を保証します。ドキュメント数が多すぎると、LinearBuilderのパフォーマンスが低下します。デフォルト値:10000。

    • min_scan_doc_cnt:取得する候補セットの最小数。min_scan_doc_cntパラメーターとproxima.qc.searcher.scan_ratioパラメーターは同様の概念です。デフォルト値:10000。min_scan_doc_cntパラメーターに値を指定し、proxima.qc.searcher.scan_ratioパラメーターに値を指定した場合、大きい方の値が候補セットの最小数として使用されます。

      • min_scan_doc_cntパラメーターまたはproxima.qc.searcher.scan_ratioパラメーターに過度に大きな値を指定しないでください。過度に大きな値を指定すると、システムパフォーマンスが低下し、遅延が発生します。

      • ほとんどの場合、トップkベクトルを取得する場合、min_scan_doc_cntパラメーターの値としてmax(10000、100 * topk)を使用し、proxima.qc.searcher.scan_ratioパラメーターの値としてmax(10000、100 * topk)/ total_doc_cntを使用することをお勧めします。さらに、パフォーマンス、検索率、ドキュメント数に基づいてパラメーターを設定する必要があります。

      • これら2つの類似したパラメーターは、リアルタイムおよびマルチカテゴリシナリオの要件を満たすために使用されます。通常のユーザーの場合は、proxima.qc.searcher.scan_ratioパラメーターのみを設定できます。

    • enable_recall_report:検索率を報告するかどうかを指定します。デフォルト値:false。

    • is_embedding_saved:元のベクトルを保存するかどうかを指定します。デフォルト値:false。INT8量子化またはFP16量子化を有効にし、リアルタイム検索を有効にする場合は、is_embedding_savedパラメーターをtrueに設定してください。そうしないと、増分ベクトルをバッチで構築できません。

    • enable_rt_build:リアルタイムインデックス作成をサポートするかどうかを指定します。デフォルト値:true。

    • ignore_invalid_doc:異常なベクトルデータを無視するかどうかを指定します。デフォルト値:true。

    • rt_index_params:リアルタイムインデックス作成のパラメーター。enable_rt_buildパラメーターがtrueに設定されている場合、このパラメーターを指定できます。

      {
        "proxima.oswg.streamer.segment_size": 2048
      }