You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在单个Cypher查询中实现GraphRAG应用的混合向量与图搜索?

整合向量搜索与图搜索的高效Cypher查询方案

核心思路

先通过向量相似度匹配定位目标节点,再以这些节点为起点,遍历关联关系扩展相关节点,将两步逻辑合并在单条Cypher查询中,减少多次查询的开销。

基础实现示例

假设你使用支持向量索引的图数据库(如Neo4j),节点Document包含向量属性embedding,需匹配输入向量并遍历其关联的Entity节点:

// 第一步:向量搜索筛选目标节点
MATCH (doc:Document)
// 用相似度阈值过滤,或结合topK获取最相关节点
WHERE vector.similarity(doc.embedding, $inputEmbedding) > 0.7
WITH doc
ORDER BY vector.similarity(doc.embedding, $inputEmbedding) DESC
LIMIT 10  // 限制返回节点数,控制后续图搜索范围

// 第二步:遍历关联关系,扩展相关节点
MATCH (doc)-[:REFERENCES]->(entity:Entity)
// 可选:遍历深层关联节点
OPTIONAL MATCH (entity)-[:RELATED_TO]->(related:Entity)
// 返回所需字段
RETURN 
  doc.title AS document_title,
  entity.name AS core_entity,
  collect(DISTINCT related.name) AS related_entities

高效查询优化技巧

  • 向量索引加持:给节点的向量属性创建专用向量索引,大幅提升向量搜索速度。以Neo4j为例:
    CREATE VECTOR INDEX doc_embedding_idx 
    FOR (d:Document) 
    ON (d.embedding) 
    OPTIONS {
      indexConfig: {
        `vector.dimensions`: 1536,  // 对应你的向量维度
        `vector.similarity_function`: 'cosine'  // 选择合适的相似度算法
      }
    }
    
  • 用topK替代阈值过滤:如果需要精准获取最相似的N个节点,直接调用向量索引的topK查询:
    CALL db.index.vector.queryNodes('doc_embedding_idx', 8, $inputEmbedding) 
    YIELD node AS doc, score
    MATCH (doc)-[:MENTIONS]->(topic:Topic)
    RETURN doc.id, score, topic.name
    
  • 控制遍历深度:根据业务需求限制关系遍历的层数(如仅直接关联节点),避免无意义的深层遍历消耗资源。
  • 参数化传递向量:用$inputEmbedding参数传递输入向量,避免硬编码,同时提升查询复用性和安全性。

内容的提问来源于stack exchange,提问作者Guy Korland

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.11 18:42:12