VectorChord
===========

VectorChordは、高密度ベクトル検索のための高性能Postgres拡張機能です。大規模な場合により高速でメモリ効率の高いインデックスタイプでpgvectorを拡張し、数百万または数十億の埋め込みを含むナレッジベースに最適です。

インストールと完全なテクニカルリファレンスについては、
:ref:`VectorChord in pg_extensions </pg_extensions/vectorchord/>` を参照してください。

VectorChordを使用する場合
-------------------------

標準のpgvector
HNSWおよびIVFFlatインデックスは、ほとんどのワークロードでうまく動作します。
VectorChordは、次の場合に最適な選択です。

- ナレッジベースには数百万または数十億の埋め込みが含まれ、HNSWインデックスがRAMを消費しすぎています。

- 高スループットでのクエリレイテンシーの低下が必要です。

- 埋め込みは高次元ですpgvectorのHNSWインデックスでサポートされている2000次元制限を超えています。

インデックスタイプ
------------------

VectorChordは2つのインデックスタイプを提供し、どちらも :ref:`Vectorインデックス構成ヘルパー <Vectorインデックス構成ヘルパー>` 
を介して構成できます。

Chord_hnsw
^^^^^^^^^^

グラフの接続性と検索の深さの詳細な制御を備えたHNSWのVectorChord実装。より多くのチューニング制御または大規模なパフォーマンスの向上が必要な場合、pgvectorのHNSWからのドロップインアップグレードとして使用します。

``aidb.vector_index_chord_hnsw_config()`` で構成します。

.. csv-table::
  :header: Parameter,Description
  :widths: 10,30
  :align: left
  :class: longtable

  `m`,グラフ内のノードごとの最大接続数デフォルト16。
  `ef_construction`,インデックス構築中の検索の深さデフォルト64。
  `max_connections`,グラフ接続のハードキャップ。
  `ml`,グラフレイヤー構造を制御するレベル乗数。
  `vector_data_type`,ベクターストレージタイプたとえば `'float32'` 。

Chord_vchordq
^^^^^^^^^^^^^

非常に大規模なスループットを最大にするように設計された量子化ベースのインデックスIVF-RaBitQ。少量のリコール精度と引き換えに、HNSWよりも大幅に高速な検索と低いメモリ使用量を実現します。

``aidb.vector_index_chord_vchordq_config()`` で構成します。

.. csv-table::
  :header: Parameter,Description
  :widths: 10,30
  :align: left
  :class: longtable

  `lists`,IVFクラスターの数。値が高いほど、スケールでの精度が向上します。
  `spherical_centroids`,正規化された重心を使用します - コサイン類似性に推奨されます。
  `vector_data_type`,ベクターストレージタイプたとえば `'float32'` 。

パイプラインでVectorChordを使用する
-----------------------------------

VectorChordインデックスタイプは、 ``aidb.knowledge_base_config()``
の\ ``vector_index``
パラメーターを介して構成されます。これは、パイプラインの作成時に\ ``step_N_options``
として渡されます。

Chord_hnswを使用したパイプラインの構成
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

.. code:: sql

   SELECT aidb.create_pipeline(
       name               => my_semantic_pipeline,
       source             => source_docs,
       source_key_column  => id,
       source_data_column => content,
       destination        => my_knowledge_base,
       step_1             => KnowledgeBase,
       step_1_options     => aidb.knowledge_base_config(
                                 my_embedding_model,
                                 Text,
                                 distance_operator => Cosine,
                                 vector_index      => aidb.vector_index_chord_hnsw_config(
                                                         m               => 16,
                                                         ef_construction => 64,
                                                         max_connections => 32
                                                     )
                             ),
       auto_processing    => Live
   );

Chord_vchordqを使用したパイプラインの構成
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

.. code:: sql

   SELECT aidb.create_pipeline(
       name               => my_large_scale_pipeline,
       source             => billion_scale_docs,
       source_key_column  => id,
       source_data_column => content,
       destination        => my_large_kb,
       step_1             => KnowledgeBase,
       step_1_options     => aidb.knowledge_base_config(
                                 my_embedding_model,
                                 Text,
                                 distance_operator => Cosine,
                                 vector_index      => aidb.vector_index_chord_vchordq_config(
                                                         lists               => 1000,
                                                         spherical_centroids => true
                                                     )
                             ),
       auto_processing    => Background,
       background_sync_interval => 60 seconds
   );

チャンクとVectorChordを使用したマルチステップパイプライン
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

ドキュメントパイプラインの場合、最初にテキストをチャンクして、VectorChordでインデックスされたナレッジベースに埋め込みます。

.. code:: sql

   SELECT aidb.create_pipeline(
       name               => doc_pipeline_vchord,
       source             => raw_documents,
       source_key_column  => id,
       source_data_column => body,
       destination        => doc_knowledge_base,
       step_1             => ChunkText,
       step_1_options     => aidb.chunk_text_config(200, 250, 25, words),
       step_2             => KnowledgeBase,
       step_2_options     => aidb.knowledge_base_config(
                                 my_embedding_model,
                                 Text,
                                 vector_index => aidb.vector_index_chord_hnsw_config(
                                                    m => 32,
                                                    ef_construction => 128
                                                )
                             ),
       auto_processing    => Live
   );

インデックスタイプの選択
------------------------

.. csv-table::
  :header: Scenario,Recommended index
  :widths: 10,30
  :align: left
  :class: longtable

  "Up to ~10M vectors, general use",`chord_hnsw`
  "100M+ vectors, memory-constrained",`chord_vchordq`
  High-dimensional embeddings (>2000 dims),`chord_vchordq`
  Cosine similarity with normalized vectors,`chord_vchordq` with `spherical_centroids => true`
  Drop-in pgvector HNSW replacement,`chord_hnsw`

さらに読む
----------

- :ref:`VectorChord documentation </pg_extensions/vectorchord/>`  —
  インストール、インデックスリファレンス、およびリリースノート

- :ref:`Vectorインデックス構成ヘルパー <Vectorインデックス構成ヘルパー>`  —
  すべてのインデックス構成ファンクションの完全なパラメーターリファレンス

- :ref:`Hybrid search <Hybrid search>`  — VectorChordの密集検索とBM25キーワード検索の組み合わせ
