.. _cpp_orchestrators:

Indexes
=======

The main index interfaces are listed here and in the next sections.
Refer to this table when making decisions about which index to use.

* :cpp:class:`svs::Vamana` - A graph-based similarity search engine suitable for high recall, high throughput, and low latency.
* :cpp:class:`svs::DynamicVamana` - A dynamic graph-based similarity search engine suitable for high recall, high throughput, and low latency.
* :cpp:class:`svs::Flat` - An exhaustive search engine.
  Provides precise results at the expense of low throughput and high latency for large datasets.

Contents
--------

.. toctree::
   vamana.rst
   dynamic_vamana.rst
   flat.rst

Compatible Loaders
------------------

The table below lists the compatibility between different index and the different kinds of dataset (e.g., uncompressed, lvq etc).

.. csv-table:: Index and Loader Compatibility Matrix
   :file: loader-compatibility.csv
   :header-rows: 1

.. NOTE::

    As an implementation detail, the indexes here are type-erased instances of more specialized, heavily templated implementations.
    These low level implementations generally have a similar API to the top level indexes and can be more expressive as functions calls do not have to cross a virtual function boundary.
    However, this specialization results in a different concrete type for each implementation which can be undesireable.
    More documentation regarding the low level implementation will be available in the future.