Struct faiss::IndexShardsTemplate
-
template<typename IndexT>
struct IndexShardsTemplate : public faiss::ThreadedIndex<IndexT> Index that concatenates the results from several sub-indexes
Subclassed by faiss::IndexShardsIVF
Public Types
-
using component_t = typename IndexT::component_t
-
using distance_t = typename IndexT::distance_t
Public Functions
-
explicit IndexShardsTemplate(bool threaded = false, bool successive_ids = true)
The dimension that all sub-indices must share will be the dimension of the first sub-index added
- Parameters:
threaded – do we use one thread per sub_index or do queries sequentially?
successive_ids – should we shift the returned ids by the size of each sub-index or return them as they are?
-
explicit IndexShardsTemplate(idx_t d, bool threaded = false, bool successive_ids = true)
- Parameters:
threaded – do we use one thread per sub_index or do queries sequentially?
successive_ids – should we shift the returned ids by the size of each sub-index or return them as they are?
-
explicit IndexShardsTemplate(int d, bool threaded = false, bool successive_ids = true)
int version due to the implicit bool conversion ambiguity of int as dimension
-
inline void add_shard(IndexT *index)
Alias for addIndex()
-
inline void remove_shard(IndexT *index)
Alias for removeIndex()
-
void add(idx_t n, const component_t *x) override
supported only for sub-indices that implement add_with_ids
-
void add_with_ids(idx_t n, const component_t *x, const idx_t *xids) override
Cases (successive_ids, xids):
true, non-NULL ERROR: it makes no sense to pass in ids and request them to be shifted
true, NULL OK: but should be called only once (calls add() on sub-indexes).
false, non-NULL OK: will call add_with_ids with passed in xids distributed evenly over shards
false, NULL OK: will call add_with_ids on each sub-index, starting at ntotal
-
void search(idx_t n, const component_t *x, idx_t k, distance_t *distances, idx_t *labels, const SearchParameters *params = nullptr) const override
-
void train(idx_t n, const component_t *x) override
-
virtual void syncWithSubIndexes()
Synchronize the top-level index (IndexShards) with data in the sub-indices
-
virtual void addIndex(IndexT *index)
override an index that is managed by ourselves. WARNING: once an index is added, it becomes unsafe to touch it from any other thread than that on which is managing it, until we are shut down. Use runOnIndex to perform work on it instead.
-
void removeIndex(IndexT *index)
Remove an index that is managed by ourselves. This will flush all pending work on that index, and then shut down its managing thread, and will remove the index.
-
void runOnIndex(std::function<void(int, IndexT*)> f)
Run a function on all indices, in the thread that the index is managed in. Function arguments are (index in collection, index pointer)
-
void reset() override
faiss::Index API All indices receive the same call
-
inline int count() const
Returns the number of sub-indices.
-
inline IndexT *at(size_t i)
Returns the i-th sub-index.
-
inline const IndexT *at(size_t i) const
Returns the i-th sub-index (const version)
Public Members
-
bool successive_ids
-
bool own_indices = false
Whether or not we are responsible for deleting our contained indices.
Protected Functions
-
virtual void onAfterAddIndex(IndexT *index) override
Called just after an index is added.
-
virtual void onAfterRemoveIndex(IndexT *index) override
Called just after an index is removed.
-
using component_t = typename IndexT::component_t