结构体 faiss::InvertedListScanner
-
struct InvertedListScanner
处理查询的对象。要扫描的倒排列表从外部提供。该对象有很多状态,但 distance_to_code 和 scan_codes 可以在多个线程中调用
公共函数
-
inline InvertedListScanner(bool store_pairs = false, const IDSelector *sel = nullptr)
-
virtual void set_query(const float *query_vector) = 0
从现在开始我们处理这个查询。
-
virtual void set_list(idx_t list_no, float coarse_dis) = 0
以下代码来自此倒排列表
-
virtual float distance_to_code(const uint8_t *code) const = 0
计算单个查询到代码的距离
-
virtual size_t scan_codes(size_t n, const uint8_t *codes, const idx_t *ids, float *distances, idx_t *labels, size_t k) const
扫描一组代码,计算与当前查询的距离,并在必要时更新结果堆。 默认实现调用 distance_to_code。
- 参数:
n – 要扫描的代码数量
codes – 要扫描的代码 (n * code_size)
ids – 相应的 ID(如果 store_pairs 为真则忽略)
distances – 堆距离(大小为 k)
labels – 堆标签(大小为 k)
k – 堆大小
- 返回值:
执行的堆更新次数
-
virtual size_t iterate_codes(InvertedListsIterator *iterator, float *distances, idx_t *labels, size_t k, size_t &list_size) const
-
virtual void scan_codes_range(size_t n, const uint8_t *codes, const idx_t *ids, float radius, RangeQueryResult &result) const
扫描一组代码,计算与当前查询的距离,并在距离小于半径时更新结果
(默认实现失败)
-
virtual void iterate_codes_range(InvertedListsIterator *iterator, float radius, RangeQueryResult &result, size_t &list_size) const
-
inline virtual ~InvertedListScanner()
公共成员
-
idx_t list_no = -1
记住当前列表
-
bool keep_max = false
保持最大值而不是最小值
-
bool store_pairs
在倒排列表中存储位置而不是标签
-
const IDSelector *sel
在这个id子集中搜索
-
size_t code_size = 0
在scan_codes的默认实现中使用
-
inline InvertedListScanner(bool store_pairs = false, const IDSelector *sel = nullptr)