存储、索引支持高维(2048)特征向量

Storage, index support for high dimensional(2048) feature vector

我有2048维的特征向量,它被归一化了。

而且我需要将它存储在 postgresql 中以便快速访问以进行搜索。 使用余弦相似度或欧氏相似度进行搜索。 到目前为止我已经尝试过:

  1. 我试过 gin 索引,distances 函数根本不使用索引,所以顺序扫描很糟糕。
  2. cube 扩展,但有 100 维约束,可以将其增加到 128,之后要么索引失败,要么数据太大而无法连续存储。
  3. 将 2048 个维度拆分为 16128 个部分,并作为多维数据集数据类型存储在单独的 table(与 id 链接)中。但最后我必须计算距离总和。虽然比顺序扫描好。
  4. PCA - 对于降维,128 维向量的精度不够。

会有帮助:

  1. 此类工作负载的扩展(至少支持欧氏距离和索引)
  2. 改进 3
  3. 中的拆分搜索算法
  4. 其他开源数据库系统。

我发现 PostgreSQL(尽其所能)有基本的局限性。

我发现 elasticsearch 是很好的替代品。

它具有对基本结构化 data/types 的所有支持,并内置对高维向量的所有 L1、L2 和余弦距离的支持。

我尝试了 250.000 个样本,搜索时间不到一秒。