结构体 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_
这个索引是多线程的吗?
-
using component_t = typename IndexT::component_t