学习笔记 · Obsidian

数据库内向量检索与高级过滤

LangChainTypeScriptJavaScript

结论

  • Neo4j、Oracle、PostgreSQL、Redis、SAP HANA、YDB 把向量能力放进现有数据库/数据平台,能复用权限、事务或业务字段;代价是数据库版本、扩展、索引与连接池调优更复杂。
  • filter DSL 都不同,tenant/ACL 条件必须由服务端生成或合并;任何表名、列名、Cypher/SQL 片段都不能直接来自用户。
  • HNSW/IVF 等 ANN 索引提高速度但降低或改变召回;应先用 exact baseline,再按真实查询调参。

PGVectorStore

现代 PGVectorStore 使用 @langchain/pgvector、pg 和 pgvector extension,官方建议新项目优先它而不是 legacy PGVector。页面有一处说明把 JavaScript 推荐包写成 @langchain/community,与同页安装/类表的 @langchain/pgvector 矛盾;应以安装示例、API reference 和当前 npm 包核对,不能照抄该句。

  • initialize() 检查/创建表;表名与列名不可包含用户输入,否则有 SQL injection。
  • 支持 ID、delete、exact filter、in、notIn、arrayContains、Retriever。
  • 可复用 pg.Pool;至少先运行一次 initialize 建表。
  • 默认 sequential scan 有 100% recall;createHnswIndex() 支持 dimensions、m、efConstruction、distanceFunction,维度上限页面标为 2000。
  • 完成后调用 end() 或关闭共享 pool。

Redis

Redis 8 起 RediSearch 内置;@langchain/redis 同时提供:

  • FluentRedisVectorStore:新项目推荐,强类型 Tag、Num、Text、Geo、Timestamp、Custom filter,array-based custom schema;
  • RedisVectorStore:legacy,object-based schema 和较基础过滤。

Fluent 版本要求显式 customSchema,文档推断只用于差异警告。GEO 使用 longitude/latitude,timestamp 存数值;metadata 拆成独立字段,与 legacy JSON blob index 不兼容。迁移应新建 index 并重新摄取,不能直接指向旧 index。

预过滤在 vector 计算前执行,可减少比较量;但 raw Custom RediSearch syntax 必须受控。连接结束调用 disconnect()。

SAP HANA

HanaDB 支持 external embedding 与数据库内 VECTOR_EMBEDDING();内部 embedding 和 rerank 要求启用 NLP。功能最完整:

  • cosine(默认)或 L2;HNSW 默认 m=64、efConstruction=128、efSearch=200;
  • filter 支持比较、集合、between、like、contains、and/or;
  • MMR、metadata filter、CROSS_ENCODE rerank、独立 HanaReranker;
  • 标准表三列 text/metadata/vector,也可映射 custom table;
  • 高频 filter metadata 可复制到专用列,提高过滤性能。

useMapMerge 只允许内部 embedding。custom table 的附加列插入时必须允许 NULL;specificMetadataColumns 的 schema/类型需要 migration 管理。

OracleVS

OracleVS 把 text、JSON metadata 与 vector 保存在 Oracle,支持 rich filter、HNSW(默认)和 IVF。可接受连接或已有 pool;应用应复用 pool 而不是每次建连接。

  • filter 操作符包括 eq/ne/lt/lte/gt/gte/in/nin/between/exists 与 and/or;
  • HNSW 适合 recall/latency 平衡,IVF 用聚类分区换可预测内存;
  • index 建议在批量加载后创建,重建/切换通过受控 DDL;
  • 文档概述提到 Oracle 26ai hybrid/full-text,但当前页面示例主要覆盖写入、filter 和 index,实际启用需核对数据库版本与 Oracle 文档。

Neo4j 与 YDB

  • Neo4jVectorStore 支持 vector、Euclidean/cosine、hybrid、existing graph、custom retrievalQuery 和 metadata filter。连接账户要最小权限,优先只读;动态 Cypher 可能破坏或泄露图数据。
  • YDBVectorStore 利用分布式 SQL 的一致性与 ACID;ID 缺失时生成 UUID,同 ID 重插覆盖,支持删除、score 与 AND metadata filter。await using 可自动关闭 driver,不使用时必须手动 close()。

生产设计

  1. DDL/索引创建与在线查询账户分离;应用运行账户不得任意建表/删索引。
  2. exact 与 ANN 在同一评估集对比 recall 和 p99;索引参数变化作为版本发布。
  3. filter 高频字段建立原生列/索引;记录选择性并防止低选择性全扫。
  4. 数据库 pool 设置上限、获取超时、statement timeout 和健康检查;长批量写采用 checkpoint。
  5. 备份必须同时覆盖正文、metadata、embedding model/version 与 index 重建配置。