文档
注册

SearchWithFilter(faissIndex多filter)

API定义

void SearchWithFilter(std::vector<Index *> indexes, Index::idx_t n, const float *x, Index::idx_t k, float *distances, Index::idx_t *labels, void *filters[], bool merged);

功能描述

“indexes”执行检索,根据输入的特征向量返回最相似的“k”条特征的ID。

提供基于CID过滤的功能,“filters”为大小为“n”的指针数组,“filters”数组中的每个指针指向indexes.size() * 6 个uint32_t的数组,每6个uint32_t数值为一个filter。每个filter的前4个数字(128bit)表示对应的CID,后2个数字表示对应的时间戳左闭合的范围,即[x, y)。

输入

std::vector<Index *> indexes:待执行检索的多个Index。

Index::idx_t n:执行检索的query数。

const float *x:执行检索的query特征向量。

Index::idx_t k:需要返回的最近似的结果的个数。

void *filters[]:过滤条件。

bool merged:是否要合并多个Index上执行检索的结果。

输出

float *distances:查询向量与距离最近的前“k”个向量间的距离值。

idx_t *labels:查询的距离最近的前“k”个向量的ID。

返回值

约束说明

  • 多Index批量检索功能仅支持单卡环境,暂不支持多卡环境。
  • 当前“indexes”支持类型参见如下。
    • “indexes”为AscendIndexSQ的指针且QuantizerType为QT_8bit,并且需满足0 < indexes.size() ≤ 10000。
    • “indexes”为AscendIndexIVFSP的指针且对应的QuantizerType为QT_8bit、MetricType为METRIC_L2,并且需满足0 < indexes.size() ≤ 10000。
  • “n”不超过1024。
  • “k”不超过1024。
  • “x”需要为非空指针,且长度应该为dim * n,否则可能出现越界读写的错误并引起程序崩溃。
  • “distances”/“labels”需要为非空指针,且满足:
    • 当merged = true,长度应该为k * n,否则可能出现越界读写的错误并引起程序崩溃。
    • 当merged = false,长度应该为indexes.size() * k * n,否则可能出现越界读写的错误并引起程序崩溃。
  • “filters”需要为长度为n的指针数组,且数组中每个指针指向长度为indexes.size() * 6的uint32_t的数组,否则可能出现越界读的错误并引起程序崩溃。
搜索结果
找到“0”个结果

当前产品无相关内容

未找到相关内容,请尝试其他搜索词