说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

利用Spring Data Neo4j搭建推荐系统

HTML文档下载 WORD文档下载 PDF文档下载
Neo4j是一款非常流行的开源图型NoSQL数据库。它完全支持ACID数据库事务属性,由于其良好的图数据模型设计,Neo4j的速度非常快。对于构建性能优异的推荐系统来说,Neo4j的速度要比传统的关系型数据库快1000倍。

本文作者Daniel Bartl是一位项目开发者,在这里分享如何使用Spring Data Neo4j来构建推荐系统。Neo4j是一款非常流行的开源图型NoSQL数据库。它完全支持ACID数据库事务属性,由于其良好的图形数据模型设计,Neo4j的速度非常快。对于连接的数据操作,Neo4j的速度要比传统的关系型数据库快1000倍。Spring Data是Spring的一个核心项目,其下涵盖了如Spring Data JPA、Spring Data MongoDB、Spring Data Redis、Spring for Hadoop等子项目,而Spring Data Neo4j也是Spring Data下的一个重要子项目,它提供了高级的特性以将注解的实体类映射到Neo4j图型数据库上。其模板编程模型类似于我们熟知的Spring模板,为与图的交互提供了基础,此外也用于高级的仓库支持。该项目旨在为NoSQL数据库操作提供便捷的支持。

在文章的末尾实现了一个的示例,该示例是一个购物系统,能计算出其他用户的浏览结果供当前用户参考是很重要的特性,现在很多电商都提供了这个特性,例如Amazon。由于用户与商品之间的联系是很容易使用图表来表达的,因此该示例将使用Neo4j来表示结点以及结点之间的关系。


Spring Data Neo4j简介

首先来介绍一下Spring Data。这是SpringSource的一个项目,旨在为NoSQL数据库提供Spring的编程模型以及便捷性。Spring Data支持各种NoSQL数据库,如Redis、Riak以及MongoDB等等。它还为Hadoop等MapReduce实现提供了一个抽象层。

Spring Data Neo4j起步于2010年,你可以在Neo4j网站上找到很多有价值的资源。目前最棒的指南就是由该项目的主开发者Michael Hunger所编写的“Good Relationships”,这本指南提供了免费的下载,也有相应的HTML版本。其中有些Spring Data Neo4j代码示例位于Spring Data Neo4j Git仓库上。此外,O’Reilly也有一本关于Spring Data Neo4j的图书。

为何不使用核心Neo4j?

当然了,你也可以只使用核心Neo4j或是构建自己的集成方案。但如果你过去曾有过其他的Spring项目开发经验,那么你就会发现Spring的好处了。作为一名软件工程师,你不想关注于实体映射或是事务管理等细节信息。你只要了解这些概念就行了,剩下的事情Spring会帮你处理,这相当于Spring中的Hibernate支持一样:

  • 通用的Spring与Spring Data基础设施。你可以轻松将Neo4j嵌入到Spring框架所管理的现有应用当中。
  • 通过注解来声明结点以及结点之间的关系。
  • 代码很容易理解。
  • 实体状态由图型数据库所维护。
  • 支持Neo4j服务器。

如何使用Spring Data Neo4j?

如果使用Maven,那么你可以通过将如下配置添加到pom.xml中,将Spring Data Neo4j引入到项目中(除了Spring与Neo4j的依赖外):

  • 通用的Spring与Spring Data基础设施。你可以轻松将Neo4j嵌入到Spring框架所管理的现有应用当中。
  • 通过注解来声明结点以及结点之间的关系。
  • 代码很容易理解。
  • 实体状态由图型数据库所维护。
  • 支持Neo4j服务器。

通过如下Spring的上下文来设置Neo4j:


Neo4j配置的“storeDirectory”属性可以是任意的目录,Neo4j数据库将会存储在那里。接下来开始实现代表图模型的结点与关系实体。

如何声明结点实体?

创建如下的类来表示结点实体:


在Spring框架中getters与setters对于属性访问是必须的。你还可以实现自己的额外的方法。一个典型的Neo4j实体一般是个经典的JavaBean,包含了属性以及访问器。此外,我们还建议实现equals与hashCode方法,因为有时Spring Data Neo4j会比较对象来判断结点与关系映射。

如何创建结点与实体间的关系?

Spring Data可以通过3种不同的方式来处理结点间的关系,到底选择哪一种取决于两个方面:需要建模的关系类型(1对1还是1对多)以及是简单关系还是复杂关系。复杂关系拥有额外的属性。

1对1关系非常简单:主结点通过属性来引用子节点(需要实现访问器),无需注解。Spring Data会处理所有其他事情。

在简单的1对多关系中,你需要在主结点中添加一个包含子结点的集合(参见上述代码示例)。除此之外,你还需要通过@RelatedTo(type = “relationshipType”) 对集合添加注解,如下所示:

复杂关系能够展示出Spring Data强大的图建模能力。你可以通过额外的属性对真实世界的关系建模,为了做到这一点,你需要创建用于存储关系属性的关系实体。此外,还需要通过注解(@StartNode与@EndNode)来指定主结点和子结点。参加如下代码示例:

要注意@Fetch属性。在很多情况下,在加载完特定的实体后,并不是所有相关的1对多对象都需要加载出来。当加载了一个结点实体后,Spring Data的默认行为只是取得标识相关对象的ID列表。这种方式类似于Hibernate等框架的延迟加载机制。如果不希望这样,那可以在相应的结点实体上添加@Fetch注解。

一般来说,将关系类型作为常量定义在单独的类中是个好做法,因为这些字符串会用在不同类中的不同结点上。我们的图模型在结点间存在两种关系类型,因此这个类如下代码所示:


如何加载实体及实体间的关系?

要想访问实体与关系,我们需要创建自己的接口并继承Spring的GraphRepository接口,如下代码所示:

如你所见,这个图仓库是个接口,只定义了函数名、返回值与Cypher查询(如果需要的话)。这非常方便,因为框架并不需要相应的实现。根据上面声明的参数以及主接口“GraphRepository”,Spring Data可以创建出与Neo4j核心API交互的代理对象。要想了解更多细节信息,请参阅关于仓库的文档。如果不熟悉Cypher,那么请看看这个Cypher指南。然而,有时自己实现GraphRepository也是必要的,在这种情况下,你可以编写一个类并继承该接口。

Spring Data Neo4j有哪些限制?

  1. 现在,它无法运行同时包含DISTINCT与ORDER BY的Cypher查询。
  2. 如果遇到问题,日志消息不太直观。

关于示例

该示例展示了一个购物系统的图仓库部分,重点是获得其他用户也查看过的商品。比如说,如果浏览过“奶酪比萨”页面的用户也看过“培根披萨”页面,那么这对于寻找“奶酪比萨”的用户也会很有用。你可以在Spring Data Neo4j Product User Test class中找到一些测试用例。

如何运行示例?

要想运行示例,你需要先安装好Maven。如果不熟悉Maven,那么可以阅读这篇文章来了解Maven的使用。示例代码位于github上,地址是https://github.com/comsysto/spring-data-neo4j-showcase。

遇到问题怎么办?

在准备这个示例时,我们遇到了一些挑战,相信你可能也会遇到:

  • 小心索引。如果使用id,那么应该在代码中将其声明为唯一的。
  • 如果使用的关系有属性,那么应该使用@RelatedToVia。
  • 初始化所有集合,比如说上述示例中使用的HashSet。
  • 不要将graphId作为ID。被删除结点的graphId会被Neo4j重用,并且在删除前一个后会用来表示另一个对象。
  • 对于关系的开始与结束结点使用@Fetch,否则在加载结点时是不会获取他们的。
  • 不要修改getters与setters,因为他们会被框架用来保存值。
  • 使用简单的语句来开始Cypher查询,然后不断扩展直到达到自己的目标。
  • 小心Cypher查询中的字符串 转义。Neo4j核心API中的字符串转义与Spring Data的不同。

另外,你可以根据自己的需要扩展示例。比如说,可以向结点实体添加更多的属性等。

原文:DZone                                                                                        (编译/薛梁  责编/付江)

动态改变屏幕设置-VB资料 读取档案的建立时间及存取时间 -VB资料 多个参数的属性 -VB资料 发现剪帖板的秘密 -VB资料 发现拖(Drap)过来的信息 -VB资料 防止打开同个VB应用多个实例 分割图像的原理 -VB资料 封面的设计 -VB资料 改变 Win95 的 Shell -VB资料 改变墙纸 -VB资料 格式化磁盘 -VB资料 跟我学用ActiveBar-VB资料 VB获得IE的版本号 VB获得Windows启动方式 VB获得打印机驱动程序的设定 VB获得当前计算机上的区域设置 VB获得当前用户名 VB获得分区信息并判断是否有CD VB获得某个文件夹下的所有子目录 VB获得驱动器的卷标 VB获得系统中的所有字体列表 VB获得系统中鼠标的键数 获取驱动器信息-VB资料 文章主题: 获取桌面图象 -VB资料 计算两个日期间的工作日-VB资料 监视外部程序的运行情况-VB资料 检测文件是否存在 -VB资料 检测系统驱动器-VB资料 检查电子邮件地址输入的有效性 -VB资料 检查硬盘空间 -VB资料 将数据转换为内存二进制形式字符串(模拟CV?和MK?$两组函数) -VB资料 数据库搜索的一个怪问题 共享上网问题!急~!!!! 句柄和指针有什么区别吗? 大虾快进来,帮帮兄弟们!!!再现等待!高分!! 请问C++Builder的程序中能不能使用*.mdb类型的数据库? 帮帮忙!!个位大哥 请问用java编程能实现数据采集的程序并进行传输(即c/s模式)吗? 请问什么命令找开一个窗体的? 请问:如何从文件中获取icon并得到HBITMAP句柄? 如何在客户端打开一个word文件 MVP是个什么概念???? linux启动不了,Bringup loopback interface时出错,请问是什么原因? 帮帮忙!! 我海军一艘潜艇失事 70名官兵不幸全部遇难!! 明天朋友结婚,征集整人的法子 是谁删除了我贴?? 而且没有跟我说一声!!! 白天工作,晚上溜狗,爽呀!比大暑天喝了冰镇雪碧还爽! 我的jsp服务器是iis+TOMCAT+win2000pro 不知怎的每次用不了多久就显示出 网页无法显示 目前访问该 Web 站点的用户过多,我只是自已用怎么 终于有星了,高兴,散分(第一次散分,请斑竹手下留情) 我的刚装的2000进入启动界面时,进度条读到2/3时就蓝屏了! 请问在运行时向ActiveX控件中添加ActiveX控件的方法是什么? 高手请进:如何在WinNT以上系统进行BIOS读取! 毕业设计的问题,请各位大哥帮小弟一个忙 备份与恢复 数据备份与恢复 我用win2k,下载了php4.3.1,extension_dir是c:\php\ext 可是里面没有php_gd.dll,怎么办,到哪里可以down一个补上? 帮我一下:解决中文问题 新手问题:怎么在用ATL COM WIZARD已生成的dll加入MFC 请问如何删除系统? warton给大家散分来了! 求助,请问哪儿提供的域名空间最好? 新手上路,VB中用ODBC连接ACCESS 关于ORACLE中(多)表的备份和恢复问题 MM``狂给分^*^ 找人一同研究JUnit对于数据库的测试架构 怎样在程序中动态生成数据库(内存库)?求救高手 请问,怎样用本机作web服务器? 这样的夜晚 想起一些故人.... 各位的jbuilder是用什么命令运行的 刚学者求问 python+CGI 如何获得客户端IP Win2000上, 对话框没能弹出到桌面顶层 在静态上下文中不能引用非静态变量? 有没有高手可以举例讲解一下self的各种用法? 一个很困惑的问题:文字处理软件中,字体大小改变时,字符的高度,宽度怎么变化? 移动硬盘在重装系统时忘记拔下来。结果给误删了,求助!没有格式化的! 怎样创建自己的 Cursor ? 请问一下 这个是什么意思 public Properties() { this(null)} 在SQL7中日志满了,如何清除日志. ?????????? 一个编程习惯上的问题 为中国争口气!投中国的长城和布达拉宫一票!!恳请置顶! 求一UFO电影,内容是这样的,前面忘了,女的是外星人,最后男的在田里造了一个麦田圈,然后飞碟就来了,把女的接走了.字打打完了,补充也是内容. 阿姨在超市里买了4千克苹果和5千克西瓜,共付出24.7元.已知西瓜的单价是苹果的二分之一 关计算于圆台的表面积问题圆 台的表面积=上底面+下底面+侧面上底面的半径为 下底面半径为 r那么上底面的面积=pai * 的2次幂下底面的面积= pai * r 的2次幂上底面的周长=2 * pai * 下底面 如图,木椅木床等木家具上的联接木条的金属片叫做什么? Please go to there.Are you know the boy's name?Please take the CDs Miss Brown.这些句子哪错了 哪个品牌的有机皂是纯有机的?什么品牌的有机皂是可以给宝宝用的? 160万用英语怎么说1600000 用英语该怎么说呢? lf you get to there,please let me know 哪里错了 有机皂什么品牌的好?WOWMOM品牌的有机皂是不是健康的品牌? 随便吃些什么  用英语怎么说? 有机皂是什么组成的?想知道是不是所有的有机皂都是纯有机物组成的 有机皂哪个品牌的好?什么品牌的有机皂适合宝宝的皮肤? very后面可不可以加ly(形容词)? 肥皂里的油怎么提炼?3Q 请给出答案与理由 .As you can see,the number of our roads ——rising these days.A,was keeping B,keep C,keeps D,were keeping请问,B和C有什么区别?英语很笨呀! cad,已知四边形四条边长度和面积,怎么画出四边形 肥皂为什么会气泡?3Q ____of students in our school is rising.A.Many B.A lot C.A number D.The number 四边形四条边长度一样 面积一样吗?四边形是不规则的或者平形的.四条边长度确定,面积确定吗?四条边的长度确认,就是四条边的长度是确定的,角度变化.例如四边形四条边150,86,87,153这个四边 质量为0.025kg的质点,受力F=ti的作用,式中t为时间,t=0时该质点以v=2j的速度通过坐标原点,则该质点任意时刻的位置矢量是~~ 如图是某商场一楼与二楼之间的手扶电梯示意图.其中AB,CD分别表示一楼,二楼地面的水平线,∠ABC=150°BC的长是8m,则乘电梯从点B到点C上升的高度h是(过程) 已知四条边能不能算四边形面积 (1/2)物理:质量为0.25kg的质点,受力F=ti(SI)的作用,当t=0时,该质点以v=2jm/s的速度通过原点,则该...(1/2)物理:质量为0.25kg的质点,受力F=ti(SI)的作用,当t=0时,该质点以v=2jm/s的速度通过原点,则该质 某超市在一楼和二楼之间安装有电梯天花板与地面平行请你根据图中数据计算回答:小某超市在一楼至二楼之间安装有电梯,天花板与地面平行,请你根据图中数据计算回答:小敏身高1.78m,她 麦田圈到底是外星人所为还是人为炒作? 质量m=2kg的质点,在f=7i-6j作用下,从坐标原点静止开始运动,则前2s内f力做功为?,第2s末的功率为?大学物理积分 一辆拖拉机耕地,第一天耕了全部的1/3还多2公亩,第二天耕了剩下的1/2少1公亩·,这时还剩38公亩没耕完这块地有多少公亩 麦田圈的存在是人为还是外星人所为? 如何计算圆台体的体积… 拖拉机耕地,第一天种了1/3还多30公亩,第二天种的比剩下的1/2少15公亩,这时还剩下585公亩,求这块有多少公亩? 麦田圈是怎麽一回事,这究竟是不是外星人所为还是磁场呢? 圆台的表面积怎么算阿?上面小;下面大;的圆管的表面积的计算公式! 关于毛泽东的诗词 小报的题目帮我起个题目,5—7个字左右好的追加悬赏5——不等 请问:不规则四边形的四个边的长度已知,不知道各个角的角度,怎么样求该四边形的面积? 为什么有专门给孩子用的有机皂?想知道为什么有机皂是专门给孩子用 毛泽东都有哪些诗词(题目,题材) 不规则四边形面积但四条边的长度知道,角度不知, 为什么孩子特别喜欢有机皂呢? ________are all Chinese a)We ,you and they b)you ,they and we c)he ,you and i d)they ,you and we这道题我觉得先a,可为什么答案上选b 将物重为20N的物体静止在粗糙的水平地面上,物体所受的摩擦力为 ▲ N;当用15N的水平推力恰能使将物重为20N的物体静止在粗糙的水平地面上,物体所受的摩擦力为 ▲ N;当用15N的水平推力恰 你们的孩子喜欢有机皂还是无机皂?大家的孩子比较喜欢有机皂一点还是无机皂一点 同一种四边形能够进行平面镶嵌吗? 1一个圆柱的体积是1.8立方厘米,把它削成一个最大的圆锥体,应削去()立方厘米2一个圆柱的体积是234立方厘米,与它等低等高的圆锥体积是()立方厘米3一个圆柱和一个圆锥,它们的底面积和 圆台的体积,表面积(简单点)加上意思 同一种四边形一定能进行平面镶嵌是真命题吗? 我也十分想要《经典常考公文写作与处理试题集萃》,大哥可不可以给我也发一下, 圆台的表面积和体积的程序圆台的上底面半径r,下底面半径R,高h.求圆台的表面积和体积,写出程序. 任何同一种四边形都能够进行平面镶嵌吗 如图所示,在梯形ABCD中,AB⊥AC,AB=CD,∠B=60°,AD=7,BC=14,求梯形ABCD的周长 请问怎么来选择有机皂的呢?想知道一般来说有机皂是怎么去选择的 I,you and he are all teachers.其中有哪处错误?怎么改? 有个节目叫:比手划脚,就是:一个人在做动作,然后让别人来猜出这是那个成语或是词语.寻找可以用来做节目的词语 电场强度为E方向与x轴正方向成135°现有一个电荷量为q质量为m的重力不计的负离子从原点O以初速度v0射入电场,v0与x轴正方向成45°求离子通过x轴的坐标及在该处的速率 怎么挑选有机皂?市面上的有机皂品牌琳琅满目什么品牌的好? 这个诗词该定个什么题目,千里名炀 万里齐聚 望店奇观上有客房 下设美食 中夹美容另俱桑拿 层次分明 装饰豪华可与碧海为一拼 须常来 缓精神之压 品美食之肴 此地如此之雅引无数高朋竟 bamboo有没有复数 不知道洁肤皂应该如何来选择呢?因为之前都没有选择过洁肤皂,不知道应该怎么来选择好一点? I have a tomato怎么变单数 落回原点速度是为什么是-vo 不倒翁为什么不会倒? “中国动力”吸引辛格访华中国与中东欧青年政治家论坛在京开幕沪指重挫1.25% 大消费普跌银行独专家称地下水九成遭污染 修复一亩地最中联重科A股收跌2.94% H股股价俄富豪赠女友奢华电子香烟 镶246颗俄媒称中国和印度商定定期举行联合军演意大利父子专制冒牌名酒遭警方查获 将星巴克回应售价质疑 称在中国利润不比“秀中文”成为俄罗斯政要新时尚美国男子跑马拉松织出近4米长围巾 破文莱将实施严厉伊斯兰刑法 通奸者将被日本首相安倍表示将对离岛等土地买卖实高考降英语比重引热议 能否撬动高考改日式料理或将成非物质文化遗产 已通过美情报局局长:有关美国窃听法国电话报德媒称俄前首富霍多尔科夫斯基难获释 日本156名学者成立研究会 呼吁改善QQ群里热聊\"如何结束生命\" 2应急反应从2小时缩短为5分钟 水管理“好声音”导师汪峰开唱 不理与章子怡今战重庆FC成足力求三连胜体坛短播黄金周人气城市成都列全国第五海螺沟超接待量将控制游客人数景区客流回落 门票随到随买一架美国小型飞机在哥伦比亚坠毁4人死>国际新闻精选:伊拉克5日多起暴力袭击致两百多人伤亡托蒂2球轰罗马客战国米百球 7场6助俄外长:扩大在亚太地区的存在对俄具重小将黄慧丹为中国队斩获安特卫普体操世罗马威武!7连胜开局比肩巴萨 近8战小将黄慧丹为中国队斩获安特卫普体操世南铁返程客流升温“菲特”影响赣东北奉新纺织产业逆势发展升级划归学校赢得赞声一片建设高标准农田巴格达发生一起自杀式炸弹袭击 造成至巴格达发生自杀式炸弹袭击至少28死9美国防部召回大部分被强制无薪休假文职
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘