结构体 faiss::InvertedLists

struct InvertedLists

倒排索引表多线程规则

  • 允许并发读取访问

  • 允许并发更新访问

  • 对于 resize 和 add_entries,只允许对不同列表的并发访问

faiss::ArrayInvertedLists, faiss::BlockInvertedLists, faiss::OnDiskInvertedLists, faiss::ReadOnlyInvertedLists 继承

公共类型

enum subset_type_t

enumerator SUBSET_TYPE_ID_RANGE
enumerator SUBSET_TYPE_ID_MOD
enumerator SUBSET_TYPE_ELEMENT_RANGE
enumerator SUBSET_TYPE_INVLIST_FRACTION
enumerator SUBSET_TYPE_INVLIST

公共函数

InvertedLists(size_t nlist, size_t code_size)
virtual ~InvertedLists()
virtual size_t list_size(size_t list_no) const = 0

获取列表的大小

virtual const uint8_t *get_codes(size_t list_no) const = 0

获取倒排索引表的码字,必须通过 release_codes 释放

返回值:

码字大小 list_size * code_size

virtual const idx_t *get_ids(size_t list_no) const = 0

获取倒排索引表的 id,必须通过 release_ids 释放

返回值:

id 大小 list_size

virtual void release_codes(size_t list_no, const uint8_t *codes) const

释放 get_codes 返回的码字 (默认实现是 nop)

virtual void release_ids(size_t list_no, const idx_t *ids) const

释放 get_ids 返回的 id

virtual idx_t get_single_id(size_t list_no, size_t offset) const
返回值:

倒排索引表中的单个 id

virtual const uint8_t *get_single_code(size_t list_no, size_t offset) const
返回值:

倒排索引表中的单个码字 (应该使用 release_codes 释放)

virtual void prefetch_lists(const idx_t *list_nos, int nlist) const

准备以下列表 (默认不执行任何操作) 列表可以是 -1,因此使用带符号的 long

virtual bool is_empty(size_t list_no, void *inverted_list_context = nullptr) const

检查列表是否为空

virtual InvertedListsIterator *get_iterator(size_t list_no, void *inverted_list_context = nullptr) const

为 use_iterator 的列表获取可迭代对象

virtual size_t add_entry(size_t list_no, idx_t theid, const uint8_t *code, void *inverted_list_context = nullptr)

向倒排列表添加一个条目

virtual size_t add_entries(size_t list_no, size_t n_entry, const idx_t *ids, const uint8_t *code) = 0
virtual void update_entry(size_t list_no, size_t offset, idx_t id, const uint8_t *code)
virtual void update_entries(size_t list_no, size_t offset, size_t n_entry, const idx_t *ids, const uint8_t *code) = 0
virtual void resize(size_t list_no, size_t new_size) = 0
virtual void reset()
void merge_from(InvertedLists *oivf, size_t add_id)

将所有条目从 oivf 移动 (输出时为空)

size_t copy_subset_to(InvertedLists &other, subset_type_t subset_type, idx_t a1, idx_t a2) const

将条目索引的子集复制到另一个索引

返回值:

复制的条目数

double imbalance_factor() const

1= 完全平衡, >1: 不平衡

void print_stats() const

显示有关倒排列表的一些统计信息

size_t compute_ntotal() const

对列表大小求和

公共成员

size_t nlist

可能的键值的数量

size_t code_size

每个向量的代码大小(以字节为单位)

bool use_iterator = false

请求使用迭代器而不是 get_codes / get_ids

公共静态属性

static const size_t INVALID_CODE_SIZE = static_cast<size_t>(-1)

用于 BlockInvertedLists,其中代码被打包成组,并且单个代码大小没有意义

struct ScopedCodes

公共函数

内联 ScopedCodes(const 倒排列表 *il, size_t list_no)
内联 ScopedCodes(const 倒排列表 *il, size_t list_no, size_t offset)
内联 const uint8_t *get()
内联 ~ScopedCodes()

公共成员

const 倒排列表 *il
const uint8_t *codes
size_t list_no
struct ScopedIds

公共函数

内联 ScopedIds(const 倒排列表 *il, size_t list_no)
内联 const idx_t *get()
内联 idx_t operator[](size_t i) const
内联 ~ScopedIds()

公共成员

const 倒排列表 *il
const idx_t *ids
size_t list_no