感谢3位小伙伴“?、wt、0x酸克”加入咱们这个大家庭,学习的路上,我们并不孤单~


大家好,我是小米,一个喜欢折腾技术、喜欢把复杂技术讲成小故事的31岁程序员大哥哥,最近几年,AI圈特别火的一个词就是“向量数据库”。
以前我们存数据,就像把东西放进一个个抽屉里:用户信息放用户表,订单放订单表,商品放商品表。查找的时候,我们靠字段匹配,比如“找到名字叫张三的人”。
但是AI时代不一样了,AI不只是想知道“张三是谁”,它更想知道:“和张三兴趣相似的人是谁?”、“这段文字和哪些知识相关?”、“这个问题和历史上的哪些问题接近?”
这时候,传统数据库就有点像一个只会认身份证号码的管理员,而向量数据库更像一个懂关系、懂语义、懂上下文的超级大脑,今天带大家认识一位特别的选手——Neo4j 向量数据库。
如果说普通向量数据库是一座巨大的图书馆,那么 Neo4j 就是一座拥有复杂人际关系网的智慧城市,每一本书不仅有自己的内容,还有它和其他书之间的联系,这就是 Neo4j 最大的魅力:图 + 向量 + AI搜索。
故事要从一家智能客服公司开始,公司老板小王发现,传统搜索系统越来越不好用了,用户问:“有没有适合夏天旅游,而且适合带孩子的地方?”
传统数据库可能只能搜索:
“夏天”
“旅游”
“孩子”
但是用户真正想表达的是:“寻找一个天气舒服、亲子友好、有娱乐设施的旅行地点。”,这不是关键词问题,而是语义理解问题。
于是小王引入了AI系统,AI把文字转换成向量:
“夏天旅游”可能变成:[0.21,0.45,0.76...]
“亲子旅行”可能变成:[0.20,0.44,0.75...]
两个向量距离很近,说明它们意思相似。
但是问题来了,如果只保存向量,还不够,因为旅游地点之间还有关系:
北京 → 故宫 → 历史文化
上海 → 迪士尼 → 亲子娱乐
杭州 → 西湖 → 自然景观
这时候 Neo4j 出现了。
Neo4j 不仅保存向量,还保存:
节点
关系
属性
向量数据
它让AI不仅知道“像什么”,还知道“和谁有关”。
Neo4j 是一个原生图数据库,传统数据库:
用户表
订单表
商品表
数据之间通过外键连接。
Neo4j:


关系本身就是数据,在AI应用中,Neo4j向量数据库支持:


简单来说:
普通向量数据库回答:“哪些东西和它相似?”
Neo4j回答:“哪些东西和它相似,并且为什么相关?”
1. 图向量存储
Neo4j最大的特点,就是向量存在图节点里面,比如:
用户节点:


商品节点:


节点既拥有业务属性,又拥有AI向量,这样设计非常适合:
知识图谱
推荐系统
智能问答
RAG系统
2. 关系感知搜索
这是Neo4j区别于普通向量数据库的重要能力,例如:
用户搜索:“适合Java程序员学习的AI课程”
普通向量搜索:找到《Python人工智能》、《机器学习基础》
但是Neo4j可以进一步分析:
用户:


课程:


最终返回最符合用户背景的课程,搜索不仅看向量距离,还看关系网络。
3. 实时操作
AI系统变化非常快,今天用户喜欢Java,明天用户开始学习AI,Neo4j支持实时:
创建节点
修改属性
更新向量
删除关系
不用重新构建整个数据库。
4. 图分析
Neo4j还有强大的图分析能力,例如:
推荐系统:谁和谁兴趣接近?
知识系统:哪些知识点联系最多?
风控系统:哪些账号存在异常关系?
常见算法:
PageRank
社区发现
路径分析
相似度计算
SpringAI 是Spring生态针对AI应用推出的框架,它让Java开发者可以像开发普通业务一样开发AI应用。
1. Maven基本设置
添加Spring AI依赖:


同时添加Neo4j驱动:


2. Neo4j向量数据库配置
application.yml:


配置完成后,SpringAI就可以连接Neo4j。
3. 使用代码
创建VectorStore:


保存文档:


1. 向量存储代码
例如保存用户知识:


保存后,Neo4j节点:


2. 相似性搜索代码
查询:


返回:
SpringAI入门
Java AI应用开发
大模型应用实践
3. 图操作代码
Neo4j使用Cypher语言。
创建节点:


创建关系:


1. 自定义节点配置代码
定义节点:


这样Java对象直接映射Neo4j节点。
2. 索引管理代码
创建向量索引:


索引可以大幅提升搜索速度。
3. 监控配置属性


使用Neo4j向量数据库时,需要注意几个关键点。
1、图设计
不要简单复制关系,优秀的图结构应该:
节点职责清晰
关系表达业务含义
避免超级节点
例如不要:


应该:


2、索引管理
向量搜索高度依赖索引,建议:
合理设置向量维度
使用合适距离算法
定期检查索引状态
3、关系策略
图数据库最大的价值就是关系,不要只存:
用户
商品
应该存:
用户
购买
收藏
浏览
推荐
关系越丰富,AI理解能力越强。
4、资源管理
生产环境需要关注:
JVM内存
Neo4j缓存
查询并发
连接池大小
5、监控
建议监控:
查询速度
慢查询
图增长速度
索引命中率
开发过程中,经常遇到几个问题。
1. 连接问题
验证连接URI:检查 bolt://localhost:7687 是否正确。
检查身份认证:确认用户名、密码、权限
查看网络设置:检查防火墙、Docker端口映射、网络访问
2. 性能问题
优化图结构:避免超大节点、复杂关系链
调整索引配置:检查向量维度、索引数量、查询条件
查看查询模式:分析Cypher PROFILE MATCH ...、查看执行计划。
3. 存储问题
监控图大小:关注节点数量、关系数量、索引大小
执行清理:删除无效节点、历史数据
查看保留策略:设置数据生命周期、归档策略
我个人觉得,Neo4j最大的魅力,不是它能存向量,因为存向量这件事,很多数据库都能做到,真正特别的是:它让AI拥有了一张“关系地图”。
以前AI像一个记忆力很强的人,只知道大量知识,而Neo4j让AI像一个经验丰富的人:
它知道谁和谁有关,
知道事情的发展路径,
知道答案背后的原因。
未来的智能应用,比如:
智能客服、
企业知识库、
AI助手、
推荐系统、
智能搜索,
都会越来越依赖这种“关系+向量”的能力。
所以,当SpringAI遇上Neo4j,AI应用开发就不再只是简单的数据查询,而是在构建一个真正能够理解世界关系的智能大脑。


好朋友们,我们下篇见~
夜雨聆风