文件 InvertedLists.h
-
namespace faiss
实现具有多种变体的 k-means 聚类。
版权所有 (c) Facebook, Inc. 及其附属公司。
此源代码已获得 MIT 许可,该许可位于此源树的根目录下的 LICENSE 文件中。
IDSelector 旨在定义要处理的向量子集(用于移除或作为搜索的子集)
PQ4 SIMD 封装和累积函数
基本内核使用 bbs = nb * 2 * 16 个向量累积 nq 个查询向量,并生成该向量的输出矩阵。 对于 nq * nb <= 4 很有用,否则寄存器溢出变得太大。
这些函数的实现分布在 3 个 cpp 文件中,以减少并行编译时间。 模板被显式实例化。
此文件包含用于计算距离的内核的回调。
在整个库中,向量以 float * 指针的形式提供。 当批量处理(添加/搜索)多个向量时,大多数算法都可以得到优化。 在这种情况下,它们作为矩阵传递。 当大小为 d 的 n 个向量作为 float * x 提供时,向量 i 的分量 j 是
x[ i * d + j ]
其中 0 <= i < n 且 0 <= j < d。 换句话说,矩阵始终是紧凑的。 指定矩阵的大小时,我们称其为 n*d 矩阵,这意味着行优先存储。
I/O 函数可以读取/写入到文件名、文件句柄或抽象介质的对象。
读取函数返回应该使用 delete 释放的对象。 这些对象中的所有引用都归对象所有。
倒排列表的定义 + 一些实现该接口的常用类。
由于 IVF(倒排文件)索引对于大规模用例非常有用,因此我们将与它们相关的一些函数分组到这个小库中。 大多数函数都可以在 IndexIVF 和嵌入在 IndexPreTransform 中的 IndexIVF 上工作。
在此文件中,实现了 L2 和内积之外的额外度量
实现一些神经网络层,主要用于支持 QINCo
定义一些将变换应用于向量集的对象 通常这些是预处理步骤。
类型定义
-
using ConcatenatedInvertedLists = HStackInvertedLists
-
struct InvertedListsIterator
-
struct InvertedLists
- #include <InvertedLists.h>
倒排列表多线程规则表
允许并发读取访问
允许并发更新访问
对于 resize 和 add_entries,仅允许并发访问不同的列表
被 faiss::ArrayInvertedLists, faiss::BlockInvertedLists, faiss::OnDiskInvertedLists, faiss::ReadOnlyInvertedLists 继承
公共类型
公共函数
-
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 返回的代码(默认实现为空操作)
-
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,因此是有符号的长整型。
-
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_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
公共函数
-
inline ScopedCodes(const InvertedLists *il, size_t list_no)
-
inline ScopedCodes(const InvertedLists *il, size_t list_no, size_t offset)
-
inline const uint8_t *get()
-
inline ~ScopedCodes()
-
inline ScopedCodes(const InvertedLists *il, size_t list_no)
-
struct ArrayInvertedLists : public faiss::InvertedLists
- #include <InvertedLists.h>
作为倒排列表数组的简单(默认)实现
公共类型
公共函数
-
ArrayInvertedLists(size_t nlist, size_t code_size)
-
virtual size_t list_size(size_t list_no) const override
获取列表的大小
-
virtual const uint8_t *get_codes(size_t list_no) const override
获取倒排列表的代码,必须由 release_codes 释放
- 返回值:
代码大小:list_size * code_size
-
virtual const idx_t *get_ids(size_t list_no) const override
获取倒排列表的 ID,必须由 release_ids 释放
- 返回值:
ID 大小:list_size
-
virtual size_t add_entries(size_t list_no, size_t n_entry, const idx_t *ids, const uint8_t *code) override
-
virtual void update_entries(size_t list_no, size_t offset, size_t n_entry, const idx_t *ids, const uint8_t *code) override
-
virtual void resize(size_t list_no, size_t new_size) override
-
virtual bool is_empty(size_t list_no, void *inverted_list_context = nullptr) const override
检查列表是否为空。
-
~ArrayInvertedLists() override
-
virtual void release_codes(size_t list_no, const uint8_t *codes) const
释放 get_codes 返回的代码(默认实现为空操作)
-
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,因此是有符号的长整型。
-
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 void reset()
-
void merge_from(InvertedLists *oivf, size_t add_id)
移动来自 oivf 的所有条目(输出时为空)。
-
将子集复制到另一个倒排索引列表。
将条目索引的子集复制到另一个索引。
- 返回值:
复制的条目数。
-
计算不平衡因子。
1 = 完美平衡,>1: 不平衡
-
打印统计信息。
显示关于倒排列表的一些统计信息
-
计算总条目数。
汇总列表大小
公共成员
-
码本(每个倒排列表一个向量的向量)。
-
id 的向量(每个倒排列表一个向量的向量)。
索引的倒排列表。
-
倒排列表的数量。
可能的键值的数量
-
存储向量的字节大小。
每个向量的编码大小(字节)
-
是否使用迭代器。
请求使用迭代器而不是 get_codes / get_ids
公共静态属性
-
无效码本大小。
用于 BlockInvertedLists,其中代码被打包成组,并且单个代码大小没有意义
-
ArrayInvertedLists(size_t nlist, size_t code_size)
-
只读的倒排列表,所有写入函数都会失败。
- #include <InvertedLists.h>
对于所有写入函数都会失败的 invlist。
由 faiss::HStackInvertedLists, faiss::MaskedInvertedLists, faiss::SliceInvertedLists, faiss::StopWordsInvertedLists, faiss::VStackInvertedLists 继承。
公共类型
-
子集类型的枚举。
值
-
ID 范围子集类型。
-
ID 取模子集类型。
-
元素范围子集类型。
-
倒排列表分数子集类型。
-
倒排列表子集类型。
-
ID 范围子集类型。
公共函数
-
构造函数。
-
添加条目(总是失败)。
-
virtual void update_entries(size_t list_no, size_t offset, size_t n_entry, const idx_t *ids, const uint8_t *code) override
-
virtual void resize(size_t list_no, size_t new_size) override
-
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 返回的代码(默认实现为空操作)
-
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,因此是有符号的长整型。
-
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 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 HStackInvertedLists : public faiss::ReadOnlyInvertedLists
- #include <InvertedLists.h>
倒排列表的水平堆叠。
公共类型
公共函数
-
HStackInvertedLists(int nil, const InvertedLists **ils)
通过连接 nil 个倒排列表来构建 InvertedLists
-
virtual size_t list_size(size_t list_no) const override
获取列表的大小
-
virtual const uint8_t *get_codes(size_t list_no) const override
获取倒排列表的代码,必须由 release_codes 释放
- 返回值:
代码大小:list_size * code_size
-
virtual const idx_t *get_ids(size_t list_no) const override
获取倒排列表的 ID,必须由 release_ids 释放
- 返回值:
ID 大小:list_size
-
virtual void prefetch_lists(const idx_t *list_nos, int nlist) const override
准备以下列表(默认情况下不执行任何操作),列表可以是 -1,因此是有符号的长整型。
-
virtual void release_codes(size_t list_no, const uint8_t *codes) const override
释放 get_codes 返回的代码(默认实现为空操作)
-
virtual const uint8_t *get_single_code(size_t list_no, size_t offset) const override
- 返回值:
倒排列表中的单个代码(应该使用 release_codes 释放)
-
virtual size_t add_entries(size_t list_no, size_t n_entry, const idx_t *ids, const uint8_t *code) override
-
virtual void update_entries(size_t list_no, size_t offset, size_t n_entry, const idx_t *ids, const uint8_t *code) override
-
virtual void resize(size_t list_no, size_t new_size) override
-
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)
将一个条目添加到倒排列表中。
-
更新倒排列表中的一个条目。
-
重置倒排列表。
-
从另一个倒排列表合并。
移动来自 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
汇总列表大小
公共成员
-
std::vector<const InvertedLists*> ils
-
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,其中代码被打包成组,并且单个代码大小没有意义
-
HStackInvertedLists(int nil, const InvertedLists **ils)
-
struct SliceInvertedLists : public faiss::ReadOnlyInvertedLists
- #include <InvertedLists.h>
vertical slice of indexes in another InvertedLists
公共类型
公共函数
-
SliceInvertedLists(const InvertedLists *il, idx_t i0, idx_t i1)
-
virtual size_t list_size(size_t list_no) const override
获取列表的大小
-
virtual const uint8_t *get_codes(size_t list_no) const override
获取倒排列表的代码,必须由 release_codes 释放
- 返回值:
代码大小:list_size * code_size
-
virtual const idx_t *get_ids(size_t list_no) const override
获取倒排列表的 ID,必须由 release_ids 释放
- 返回值:
ID 大小:list_size
-
virtual void release_codes(size_t list_no, const uint8_t *codes) const override
释放 get_codes 返回的代码(默认实现为空操作)
-
virtual const uint8_t *get_single_code(size_t list_no, size_t offset) const override
- 返回值:
倒排列表中的单个代码(应该使用 release_codes 释放)
-
virtual void prefetch_lists(const idx_t *list_nos, int nlist) const override
准备以下列表(默认情况下不执行任何操作),列表可以是 -1,因此是有符号的长整型。
-
virtual size_t add_entries(size_t list_no, size_t n_entry, const idx_t *ids, const uint8_t *code) override
-
virtual void update_entries(size_t list_no, size_t offset, size_t n_entry, const idx_t *ids, const uint8_t *code) override
-
virtual void resize(size_t list_no, size_t new_size) override
-
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 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
汇总列表大小
公共成员
-
const InvertedLists *il
-
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,其中代码被打包成组,并且单个代码大小没有意义
-
SliceInvertedLists(const InvertedLists *il, idx_t i0, idx_t i1)
-
struct VStackInvertedLists : public faiss::ReadOnlyInvertedLists
公共类型
公共函数
-
VStackInvertedLists(int nil, const InvertedLists **ils)
通过连接 nil 个倒排列表来构建 InvertedLists
-
virtual size_t list_size(size_t list_no) const override
获取列表的大小
-
virtual const uint8_t *get_codes(size_t list_no) const override
获取倒排列表的代码,必须由 release_codes 释放
- 返回值:
代码大小:list_size * code_size
-
virtual const idx_t *get_ids(size_t list_no) const override
获取倒排列表的 ID,必须由 release_ids 释放
- 返回值:
ID 大小:list_size
-
virtual void release_codes(size_t list_no, const uint8_t *codes) const override
释放 get_codes 返回的代码(默认实现为空操作)
-
获取单个码字。(list_no: 列表编号, offset: 偏移量)
- 返回值:
倒排列表中的单个代码(应该使用 release_codes 释放)
-
预取列表。(list_nos: 列表编号数组, nlist: 列表数量)
准备以下列表(默认情况下不执行任何操作),列表可以是 -1,因此是有符号的长整型。
-
添加条目。(list_no: 列表编号, n_entry: 条目数量, ids: ID数组, code: 码字)
-
更新条目。(list_no: 列表编号, offset: 偏移量, n_entry: 条目数量, ids: ID数组, code: 码字)
-
virtual void resize(size_t list_no, size_t new_size) override
-
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 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
汇总列表大小
公共成员
-
std::vector<const InvertedLists*> ils
-
std::vector<idx_t> cumsz
-
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,其中代码被打包成组,并且单个代码大小没有意义
-
VStackInvertedLists(int nil, const InvertedLists **ils)
-
struct MaskedInvertedLists : public faiss::ReadOnlyInvertedLists
- #include <InvertedLists.h>
如果第一个倒排列表非空,则使用它,否则使用第二个。
如果 il1 中有几个倒排列表太长,而 il0 有这些列表的替换列表(其他列表为空),则此方法非常有用。
公共类型
-
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
-
enumerator SUBSET_TYPE_ID_RANGE
公共函数
-
MaskedInvertedLists(const InvertedLists *il0, const InvertedLists *il1)
-
virtual size_t list_size(size_t list_no) const override
获取列表的大小
-
virtual const uint8_t *get_codes(size_t list_no) const override
获取倒排列表的代码,必须由 release_codes 释放
- 返回值:
代码大小:list_size * code_size
-
获取指定列表的ID。
获取倒排列表的 ID,必须由 release_ids 释放
- 返回值:
ID 大小:list_size
-
virtual void release_codes(size_t list_no, const uint8_t *codes) const override
释放 get_codes 返回的代码(默认实现为空操作)
-
virtual const uint8_t *get_single_code(size_t list_no, size_t offset) const override
- 返回值:
倒排列表中的单个代码(应该使用 release_codes 释放)
-
virtual void prefetch_lists(const idx_t *list_nos, int nlist) const override
准备以下列表(默认情况下不执行任何操作),列表可以是 -1,因此是有符号的长整型。
-
virtual size_t add_entries(size_t list_no, size_t n_entry, const idx_t *ids, const uint8_t *code) override
-
virtual void update_entries(size_t list_no, size_t offset, size_t n_entry, const idx_t *ids, const uint8_t *code) override
-
virtual void resize(size_t list_no, size_t new_size) override
-
virtual bool is_empty(size_t list_no, void *inverted_list_context = nullptr) const
检查列表是否为空。
-
获取倒排列表的迭代器。
获取使用 use_iterator 的列表的可迭代对象。
-
向倒排列表添加条目。
将一个条目添加到倒排列表中。
-
更新倒排列表中的条目。
-
重置倒排列表。
-
从另一个倒排列表合并。
移动来自 oivf 的所有条目(输出时为空)。
-
将子集复制到另一个倒排列表。
将条目索引的子集复制到另一个索引。
- 返回值:
复制的条目数。
-
计算不平衡因子。
1 = 完美平衡,>1: 不平衡
-
打印统计信息。
显示关于倒排列表的一些统计信息
-
计算总条目数。
汇总列表大小
公共成员
-
第一个倒排列表。
-
第二个倒排列表。
-
列表的数量。
可能的键值的数量
-
代码的大小。
每个向量的编码大小(字节)
-
是否使用迭代器。
请求使用迭代器而不是 get_codes / get_ids
公共静态属性
-
无效的代码大小。
用于 BlockInvertedLists,其中代码被打包成组,并且单个代码大小没有意义
-
enum subset_type_t
-
停用词倒排列表。
- #include <InvertedLists.h>
如果 il 中的倒排列表小于 maxsize,则返回它,否则返回一个空的 invlist。
公共类型
公共函数
-
StopWordsInvertedLists(const InvertedLists *il, size_t maxsize)
-
virtual size_t list_size(size_t list_no) const override
获取列表的大小
-
virtual const uint8_t *get_codes(size_t list_no) const override
获取倒排列表的代码,必须由 release_codes 释放
- 返回值:
代码大小:list_size * code_size
-
virtual const idx_t *get_ids(size_t list_no) const override
获取倒排列表的 ID,必须由 release_ids 释放
- 返回值:
ID 大小:list_size
-
virtual void release_codes(size_t list_no, const uint8_t *codes) const override
释放 get_codes 返回的代码(默认实现为空操作)
-
virtual const uint8_t *get_single_code(size_t list_no, size_t offset) const override
- 返回值:
倒排列表中的单个代码(应该使用 release_codes 释放)
-
virtual void prefetch_lists(const idx_t *list_nos, int nlist) const override
准备以下列表(默认情况下不执行任何操作),列表可以是 -1,因此是有符号的长整型。
-
virtual size_t add_entries(size_t list_no, size_t n_entry, const idx_t *ids, const uint8_t *code) override
-
virtual void update_entries(size_t list_no, size_t offset, size_t n_entry, const idx_t *ids, const uint8_t *code) override
-
virtual void resize(size_t list_no, size_t new_size) override
-
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 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
汇总列表大小
公共成员
-
const InvertedLists *il0
-
size_t maxsize
-
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,其中代码被打包成组,并且单个代码大小没有意义
-
StopWordsInvertedLists(const InvertedLists *il, size_t maxsize)
-
using ConcatenatedInvertedLists = HStackInvertedLists