类 faiss::IndexReplicasTemplate

template<typename IndexT>
class IndexReplicasTemplate : public faiss::ThreadedIndex<IndexT>

获取单独的 faiss::Index 实例,并拆分查询以发送到每个 Index 实例,并在完成后将结果连接在一起。每个索引都由单独的 CPU 线程管理。

公共类型

using component_t = typename IndexT::component_t
using distance_t = typename IndexT::distance_t

公共函数

explicit IndexReplicasTemplate(bool threaded = true)

所有子索引必须共享的维度将是添加的第一个子索引的维度

参数:

threaded – 我们是否为每个子索引使用一个线程,或者按顺序查询?

explicit IndexReplicasTemplate(idx_t d, bool threaded = true)
参数:
  • d – 所有子索引必须共享的维度

  • threaded – 我们是否为每个子索引使用一个线程,或者按顺序查询?

explicit IndexReplicasTemplate(int d, bool threaded = true)

int 版本,因为 int 作为维度的隐式 bool 转换存在歧义

inline void add_replica(IndexT *index)

addIndex() 的别名

inline void remove_replica(IndexT *index)

removeIndex() 的别名

void train(idx_t n, const component_t *x) override

faiss::Index API 所有索引接收相同的调用

void add(idx_t n, const component_t *x) override

faiss::Index API 所有索引接收相同的调用

void search(idx_t n, const component_t *x, idx_t k, distance_t *distances, idx_t *labels, const SearchParameters *params = nullptr) const override

faiss::Index API 查询被分割成每个子索引的切片,分割方式为 ceil(n / #indices) (对于我们的子索引)。

void reconstruct(idx_t, component_t *v) const override

从第一个索引重建。

void syncWithSubIndexes()

将顶层索引 (IndexShards) 与子索引中的数据同步。

virtual void addIndex(IndexT *index)

覆盖由我们自己管理的索引。警告:一旦添加了索引,从任何其他线程(而不是管理它的线程)访问它都是不安全的,直到我们关闭。请改用 runOnIndex 在其上执行工作。

void removeIndex(IndexT *index)

删除由我们自己管理的索引。这将刷新该索引上的所有挂起工作,然后关闭其管理线程,并删除该索引。

void runOnIndex(std::function<void(int, IndexT*)> f)

在索引的管理线程中,对所有索引运行一个函数。 函数参数是(集合中的索引,索引指针)。

void runOnIndex(std::function<void(int, const IndexT*)> f) const
void reset() override

faiss::Index API 所有索引接收相同的调用

inline int count() const

返回子索引的数量。

inline IndexT *at(size_t i)

返回第 i 个子索引。

inline const IndexT *at(size_t i) const

返回第 i 个子索引(const 版本)。

公共成员

bool own_indices = false

我们是否负责删除包含的索引。

受保护的函数

virtual void onAfterAddIndex(IndexT *index) override

在添加索引之后立即调用。

virtual void onAfterRemoveIndex(IndexT *index) override

在删除索引之后立即调用。

受保护的属性

std::vector<std::pair<IndexT*, std::unique_ptr<WorkerThread>>> indices_

Index 实例的集合,以及它们的管理工作线程(如果有)。

bool isThreaded_

此索引是否为多线程?

受保护的静态函数

static void waitAndHandleFutures(std::vector<std::future<bool>> &v)