结构体 faiss::IndexShardsIVF

struct IndexShardsIVF : public faiss::IndexShardsTemplate<Index>, public faiss::Level1Quantizer

具有公共粗量化器的 IndexShards。 所有添加的索引应该是 IndexIVFInterface 索引,以便可以调用 search_precomputed。

公共类型

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

公共函数

explicit IndexShardsIVF(Index *quantizer, size_t nlist, bool threaded = false, bool successive_ids = true)
void addIndex(Index *index) override
void add_with_ids(idx_t n, const component_t *x, const idx_t *xids) override
void train(idx_t n, const component_t *x) override
void search(idx_t n, const component_t *x, idx_t k, distance_t *distances, idx_t *labels, const SearchParameters *params = nullptr) const override
inline void add_shard(IndexT *index)

addIndex() 的别名

inline void remove_shard(IndexT *index)

removeIndex() 的别名

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

仅支持实现了 add_with_ids 的子索引。

virtual 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 版本)

void train_q1(size_t n, const float *x, bool verbose, MetricType metric_type)

训练量化器并调用 train_residual 以训练子量化器。

size_t coarse_code_size() const

计算存储列表 ID 所需的字节数

void encode_listno(idx_t list_no, uint8_t *code) const
idx_t decode_listno(const uint8_t *code) const

公共成员

bool successive_ids
bool own_indices = false

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

Index *quantizer = nullptr

将向量映射到倒排列表的量化器

size_t nlist = 0

倒排列表的数量

char quantizer_trains_alone = 0

= 0:将量化器用作kmeans训练中的索引 = 1:仅将训练集传递给量化器的train() = 2:在平面索引上进行kmeans训练+将质心添加到量化器

bool own_fields = false

对象是否拥有量化器

ClusteringParameters cp

覆盖默认的聚类参数

Index *clustering_index = nullptr

覆盖聚类期间使用的索引

保护函数

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)