---
type: study
created: 2026-08-11
updated: 2026-08-11
sensitivity: standard
status: verified
tags:
  - study
  - langchain
  - typescript
  - integrations
  - vector-store
  - database
topic: LangChain JavaScript 数据库内向量检索与高级过滤
sources:
  - https://docs.langchain.com/oss/javascript/integrations/vectorstores/neo4jvector
  - https://docs.langchain.com/oss/javascript/integrations/vectorstores/oracleai
  - https://docs.langchain.com/oss/javascript/integrations/vectorstores/pgvector
  - https://docs.langchain.com/oss/javascript/integrations/vectorstores/redis
  - https://docs.langchain.com/oss/javascript/integrations/vectorstores/sap_hanavector
  - https://docs.langchain.com/oss/javascript/integrations/vectorstores/ydb
last_verified: 2026-08-11
---
# 数据库内向量检索与高级过滤

## 结论

- 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 重建配置。

