【问题标题】:NoSQL DB for searching in vector space用于在向量空间中搜索的 NoSQL DB
【发布时间】:2015-08-09 22:28:12
【问题描述】:

我对 NoSQL DBS(例如 Cassandra、Mongo、Redis 等)完全陌生,我想创建这种类型的结构:

{
  "item_id": "ABC1",
  "x1": 0.55,
  "x2": -0.29,
  ...
  "x100": 0.17
}

基本上,我有数百万个项目和每个关联的 100 个浮点数。我的主要任务是搜索给定浮点向量附近的项目(在维度 100 的向量空间中),并获取例如前 k 个项目或距离小于 d 的所有项目。

是否有特别适合此类任务的 NoSQL 数据库?

感谢您的任何提示, 帕特里克

【问题讨论】:

    标签: vector cassandra redis distance nosql


    【解决方案1】:

    据我所知,目前还没有对非 (2|3)D 空间索引提供开箱即用支持的数据库,但您可以在应用程序层中实现自己的。

    一般来说,您希望有一个高效的 N 维最近邻搜索算法,如下所示:

    • 总体复杂度为 O(log N) 的 KD-Tree
    • Geohash

    但是它们都很难正确实现。

    【讨论】:

    • 谢谢 Shutty。我也在考虑使用 LSH 算法来降低维度并在 redis 键值模式(键:位向量,值:与此存储桶相关的项目)中使用生成的位向量(与一个给定向量相关联)。
    【解决方案2】:

    我相信没有一个提到的数据库能满足你的需求,尤其是你拥有的数据量,我推荐使用 Solr ,我有类似的情况,Solr 是最好的解决方案。

    【讨论】:

    • AFAIK Solr/Elasticsearch 没有用于非二维空间搜索的原语。
    • @Abdullah 我了解 Solr 将文档存储在向量空间中并计算查询向量和文档向量之间的余弦相似度。但是这些向量是在幕后计算的。是否可以存储我自己的向量并搜索最接近某个特定向量的向量?
    【解决方案3】:

    此问题的 2020 年更新:Elasticsearch 具有开箱即用的余弦相似度函数,用于具有多达 2048 个特征的向量(使用“密集向量”数据类型)。 我现在正在使用它,它适用于具有数十万向量的数据集。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-09-19
      • 1970-01-01
      • 2012-03-25
      • 1970-01-01
      • 2015-01-12
      • 1970-01-01
      • 2010-09-17
      相关资源
      最近更新 更多