neo4j图数据库基本概念和向量使用

一.节点

1.新建节点

create (n:GroupProduct {name:'都邦高保额团意险',description: "保险产品名称"} ) return n

CREATE:Neo4j 的关键字,用于创建新节点或关系。

(n:GroupProduct):

n 是节点的临时别名(变量名),方便在return中引用,创建完成之后就没用了。

GroupProduct 是节点的标签(Label),用于分类节点(如 Person, Product 等)。

{name:'都邦高保额团意险',description: "保险产品名称"}

节点的属性(Properties),键值对形式:

RETURN n:

返回新创建的节点 n,用于验证操作是否成功。

2.已有节点创建关系

MATCH (a:GroupProductA {name:'保高空'}), (b:GroupProduct {name:'都邦高保额团意险'})

CREATE (a)-:INCLUDE {restrict: "涉电及高空作业按6类可承保"}->(b)

变量名可以随意定义,只要能区分出来两个节点的区别,简短有意义

关系名称INCLUDE: 也可以随意定义,最好是能够见名知意,最好定义统一的团队规范

关系也可以添加属性: 比如表明这个关系有什么限制条件

使用箭头 -> 表示从左到右的关系方向

3.删除节点

MATCH (n:GroupProductA {name:'保高空' })

DETACH DELETE n

4.查询节点之间的相邻节点

MATCH (startNode {属性名: 值})-:关系类型\*..N-(relatedNode)

RETURN startNode, relatedNode

例如:

MATCH (a {name: "保高空"})-\*..1-(b)

RETURN a,b

关键参数说明
参数 说明 示例
* 表示遍历任意深度的关系(包括直接关联和间接关联)。 -\* 表示所有层级关联。
*..N 最大遍历深度。例如 *..2 表示遍历 1 层或 2 层关联。 -:EXCLUDES\*..2 最多找两跳关联。
-\[\]-> 单向遍历(从左到右)。 (a)-:PARENT_OF->(b) 只找 a 的子节点。
<-\[\]- 反向遍历(从右到左)。 (a)<-:CHILD_OF-(b) 找到 b 的父节点。

注意事项

性能问题:遍历深度(如 *..N)越大,查询耗时越长,建议根据需求限制深度。

方向性:若关系是单向的(如 EXCLUDES),需注意方向(如 ()-:EXCLUDES->())。

属性唯一性:确保查询的属性(如 product_id)是唯一标识符,否则可能返回多个节点。

5.对已创建好的节点添加属性

MATCH (a:GroupProductA {name:'保高空' })

SET a+= { embedding: \[\] }

RETURN b;

二.节点向量存储和检索

1.节点需要添加向量数组

可以选择一开添加节点的时候加一个向量属性

create (n:GroupProductA {name:'保高空',description: "保险产品可以保高空作业",embedding: 向量的具体值}) return n

或者后续添加

MATCH (a:GroupProductA {name:'保高空' })

SET a+= { embedding: 向量具体数值 }

RETURN b;

2.给节点增加向量索引

CREATE VECTOR INDEX 索引名称 IF NOT EXISTS

FOR (具体的节点标签)

ON n.embedding

OPTIONS { indexConfig: {

`vector.dimensions`: 向量维度数值,

`vector.similarity_function`: 向量计算方法

}}

例如:

CREATE VECTOR INDEX HighDutyIdx IF NOT EXISTS

FOR (n:HighDuty)

ON n.embedding

OPTIONS { indexConfig: {

`vector.dimensions`: 1536,

`vector.similarity_function`: 'cosine'

}}

3.计算向量余弦相似度

MATCH (a:GroupProductA)

WHERE a.embedding IS NOT NULL

WITH n,

// 计算向量余弦相似度或欧氏距离

vector.similarity.cosine(n.embedding, 0.1, 0.2, ...) AS similarity

RETURN n.name, similarity

ORDER BY similarity DESC

LIMIT 10;

4.查询两个节点的向量相似度

MATCH (a:GroupProductA {name: '保高空'})

MATCH (b:GroupProductA {name:'团意'})

RETURN vector.similarity.cosine(a.embedding, b.embedding)

5.查询所有向量索引

SHOW VECTOR INDEXES

6.删除指定向量索引

DROP INDEX moviePlots

三.RAG向量检索最佳实践

1.先查询出所有符合的向量节点,有个阈值,比如大于0.8的查询出所有符合的节点

2.然后再通过这些符合的节点,根据节点之间的关系,找到想要查询出来的节点属性

3.根据查询出来的节点属性和用户问题,给大模型总结

相关推荐
张洛闻Eren15 小时前
MySQL 维护稳定系统【MySQL第二课】
linux·数据库·mysql·云原生
布莱克60517 小时前
理解索引:从概念到实践
数据库·mysql
我不是疯子是傻子20 小时前
Qt CAN通信周期发送抖动?实测定时器精度校准与时间戳补偿方案
开发语言·数据库·qt
这个DBA有点耶20 小时前
数据库迁移怎么做到“零翻车“:金仓 KDMS/KDTS/KFS 工具链实测
数据库·架构·dba
2501_9378609421 小时前
MySQL联合查询(多表查询)
数据库·mysql
名字还没想好☜21 小时前
Next.js 用 Server Components 直连数据库:去掉 API 层的边界,和三条别踩的安全红线
前端·javascript·数据库·安全·react·next.js
迷迭香yy1 天前
行业板块轮动因子实战从板块资金到因子建模的本地化Python全流程
数据库·人工智能·python
SelectDB1 天前
抖音集团 实时数据仓库:Apache Doris / SelectDB 的技术能力与实践
数据库
SelectDB1 天前
网易 日志与时序数据分析:Apache Doris / SelectDB 的技术能力与实践
数据库
weixin_539446781 天前
Navicat Premium 17报缺少ODBC驱动
数据库