SuperAPI AI 工具集

neo4j-vector-index-skill

数据与分析

查看项目

更新于 10-15 16:12

技能介绍

用途

该技能面向 Neo4j 中的向量索引与向量相似度搜索场景,用于在节点或关系上创建向量索引、存储 embedding 并执行最近邻检索。资料给出的适用情形包括:创建向量索引(CREATE VECTOR INDEX)、运行向量相似度/最近邻搜索、在数据写入时把 embedding 存到图节点、对已由 GDS 算法写入的 embedding 建立索引并查询、选择相似度函数与维度/HNSW 参数/量化方式、使用 SEARCH 子句(2026.01+)或 db.index.vector.queryNodes()(2025.x)、模型变更后批量更新 embedding、把向量结果与图的直接邻域结合,以及把向量结果与全文等其它排序来源组合的混合搜索。

资料同时明确列出不适用情形:GraphRAG 流程(VectorCypherRetriever、HybridCypherRetriever、retrieval_query)应交给 neo4j-graphrag-skill;仅全文/关键词检索使用 FULLTEXT INDEX 与 db.index.fulltext.queryNodes;计算 GDS 图嵌入(FastRP、Node2Vec、GraphSAGE)属于 neo4j-gds-skill;索引管理(列出全部索引、删除 range/text/lookup 索引)属于 neo4j-cypher-skill。

版本前提

资料建议先确认版本:CALL dbms.components() YIELD versions RETURN versions[0] AS neo4j_version。2026.01 或更高版本使用 SEARCH 子句(支持索引内过滤,为首选);2025.x 使用 db.index.vector.queryNodes() 过程(该过程在 2026.04 起弃用,在 2026.x 上应改用 SEARCH)。此外资料提到 Neo4j 5.11 以下不支持向量索引。

主要能力

创建索引方面,资料给出节点单标签索引、带可过滤属性的节点索引(2026.01+,用 WITH 声明可在 SEARCH WHERE 中过滤的属性)、多标签索引(2026.01+,如 FOR (n:Document|Article))以及关系索引的写法,并给出 indexConfig 中的参数:vector.dimensions(1–4096,必填,必须与模型输出完全一致)、vector.similarity_function('cosine' 或 'euclidean',默认 'cosine')、vector.quantization.type('none'、'scalar'、'binary')、vector.quantization.enabled(2026.06 起弃用)、vector.default_search_expansion_factor、vector.hnsw.m(默认 16)、vector.hnsw.ef_construction(默认 100)。资料说明 WITH 属性仅允许标量类型(INTEGER、FLOAT、STRING、BOOLEAN、DATE、ZONED DATETIME、LOCAL DATETIME、ZONED TIME、LOCAL TIME、DURATION),不允许 LIST、POINT 或向量属性本身。

检索方面,资料给出 SEARCH 子句与 queryNodes 过程的用法,包括带索引内 WHERE 过滤的 SEARCH 写法、后置过滤(先取 50 再过滤)写法、关系索引的 db.index.vector.queryRelationships() 写法,并列出三类过滤策略的适用场景与取舍:索引内 WHERE(属性需预先声明,延迟稳定)、后置过滤(谓词灵活,可能多取后丢弃)、前置过滤(候选集小且需子集内精确最近邻,候选集大时较慢)。资料还列出索引内 WHERE 的限制:AND 谓词、标量类型、属性须在 WITH 中声明,IN 列表成员判断自 2026.06+ 支持;并给出 SEARCH 子句的硬性限制:索引名不能是参数、绑定变量须来自外层 MATCH、查询向量不能引用该绑定变量。

资料还给出向量函数:vector.similarity.cosine/euclidean、vector_distance(2025.10+,支持 EUCLIDEAN、EUCLIDEAN_SQUARED、MANHATTAN、COSINE、DOT、HAMMING)、vector_dimension_count(2025.10+)、vector_norm(2025.20+),以及 vector() 将 LIST 转为带类型的 VECTOR。混合搜索方面,资料说明当单一信号遗漏候选时使用混合搜索,常见模式是向量 + 全文,也可用于多个向量索引或带分数的图遍历结果,规则包括各来源独立检索并按分数排序、按排名而非原始分数合并、各 UNION ALL 分支返回相同列、使用 sourceK > finalK、按节点汇总贡献后按 wrrf 排序等,具体查询形状需加载 references/hybrid-search.md。

使用方式

资料给出的典型流程为:创建索引 → 轮询 SHOW VECTOR INDEXES 直到 state = 'ONLINE' 且 populationPercent = 100.0(每 5 秒一次,若 FAILED 则停止并检查日志)→ 写入 embedding。写入时对超过 100 个节点应使用 UNWIND 批量模式,并逐条校验维度;资料强调应在写入 embedding 之前先建索引,而不是相反。资料还给出在 Cypher 内用 ai.text.embed()(2025.12,需要 CYPHER 25)在查询时生成 embedding 并立即检索的写法,并提醒不要把 API key 作为字符串字面量传入,应使用参数或 apoc.static.get(),且入库与查询必须使用同一模型。

适用场景与限制

资料给出 embedding 提供方与模型的维度参考,包括 OpenAI text-embedding-3-small(1536)、text-embedding-3-large(3072)、text-embedding-ada-002(1536)、Cohere embed-v3 英文(1024)、Voyage voyage-3-large(1024)、Google text-embedding-004(768,经 Vertex AI)、Ollama nomic-embed-text(768)与 mxbai-embed-large(1024),并说明 vector.dimensions 必须与模型输出完全一致,不会自动截断。

内存方面,资料说明向量索引文件位于操作系统文件系统缓存而非 page cache,并给出 HNSW 图与向量值的近似占用估算方式。索引管理方面,资料给出 SHOW VECTOR INDEXES 与 DROP INDEX 的用法,并说明没有 ALTER VECTOR INDEX;要更改维度或相似度函数需先删除索引、按新 OPTIONS 重建、重新生成全部 embedding 并轮询至 ONLINE。资料还列出常见错误及对应处理,例如维度不匹配、索引仍在 POPULATING、Neo4j 版本过低导致无 queryNodes 或无 SEARCH、SEARCH WHERE 不支持 OR/NOT、结果为空或分数恒为 1.0 等。关于价格、收费与具体性能承诺,资料未提供。