结构体 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的默认实现中使用