Qdrant 矢量数据库中使用单个集合还是多个集合?

问题描述 投票:0回答:1

我是 Qdrant 的新手。目前,我计划将嵌入以及基本上包含语言信息的有效负载存储在 Qdrant(矢量数据库)中。我们的主要目标是使用 Qdrant 提供的 ANN 功能。

在这里,我想存储我们的训练管道生成的最后 3 天的嵌入。

实施1:

-摄取 3 天的数据,无需构建任何全局索引。 -根据日期和语言对整个数据进行分区。

  • 使用基于日期和语言的过滤器执行人工神经网络。

实施2: -根据日期建立单独的集合。即每个日期一个集合。 -为每个集合建立全局索引。 -根据语言对每个集合进行分区。 -使用基于语言的过滤器执行人工神经网络。

在实现 2 中,成本和可扩展性将是主要问题,但我相信全局索引会更好,因为与 KNN ~ 98% 匹配相比,它提供了更好的推荐结果。

在实现 1 中,与 KNN ~ 50% 匹配相比,结果急剧下降。

我在这里发布配置:

{'result': {'status': 'green',
  'optimizer_status': 'ok',
  'vectors_count': 3517432,
  'indexed_vectors_count': 3517432,
  'points_count': 3517432,
  'segments_count': 15,
  'config': {'params': {'vectors': {'size': 128,
     'distance': 'Cosine',
     'hnsw_config': {'m': 0,
      'ef_construct': 200,
      'full_scan_threshold': 10000,
      'on_disk': True,
      'payload_m': 50},
     'on_disk': True},
    'shard_number': 3,
    'replication_factor': 1,
    'write_consistency_factor': 1,
    'on_disk_payload': True},
   'hnsw_config': {'m': 0,
    'ef_construct': 100,
    'full_scan_threshold': 10000,
    'max_indexing_threads': 0,
    'on_disk': False,
    'payload_m': 16},
   'optimizer_config': {'deleted_threshold': 0.2,
    'vacuum_min_vector_number': 1000,
    'default_segment_number': 0,
    'max_segment_size': None,
    'memmap_threshold': None,
    'indexing_threshold': 100,
    'flush_interval_sec': 5,
    'max_optimization_threads': 1},
   'wal_config': {'wal_capacity_mb': 32, 'wal_segments_ahead': 0},
   'quantization_config': None},
  'payload_schema': {'dt': {'data_type': 'keyword', 'points': 3517432},
   'language': {'data_type': 'keyword', 'points': 3517432}}},
 'status': 'ok',
 'time': 0.001034984}
  1. 我可以进行哪些配置更改来改进实施 1 中的 ANN 结果?或者我应该使用实施2?
database indexing word-embedding vector-database qdrant
1个回答
0
投票

我会提倡第一个实施,尽管我对这些数字有点惊讶。然而,这是应该改进的地方。

您可以分享您要执行的查询的示例吗?我希望有一个调用 Qdrant API 并应用过滤器的示例。我看到两个有效负载索引都是

keyword
类型,但 Qdrant 1.8+ 本身支持日期时间: https://qdrant.tech/documentation/concepts/payload/?q=date#datetime

© www.soinside.com 2019 - 2024. All rights reserved.