此示例演示如何使用Neo4j®的MATLAB®接口搜索社交邻居以查找某人的二级朋友。假设您有存储在表示社交邻居的Neo4j数据库中的图形数据。此数据库有七个节点和八个关系。每个节点只有一个唯一的属性键名称
值的范围为User1.
通过User7.
.每个关系都有类型知道
.
找到你的二等朋友User1.
,使用MATLAB界面到NEO4J和有向图
有关Neo4j的MATLAB接口的详细信息,请参见Neo4j数据库接口的图形数据库工作流.
本地计算机承载具有端口号的Neo4j数据库7474
, 用户名neo4j
,以及密码马铃薯
.有关数据库中数据的可视化表示,请参见此图。
创建neo4j连接对象neo4jconn.
使用URLhttp://localhost:7474/db/data
, 用户名neo4j
,以及密码马铃薯
.
URL =.'http://localhost:7474/db/data'; 用户名=“neo4j”;密码=“matlab”;neo4jconn = neo4j(URL,用户名,密码);
检查信息
Neo4j连接对象的属性neo4jconn.
空白处信息
属性表示成功的连接。
neo4jconn.Message
ans = []
查找具有节点标签的节点人
与属性名称User1.
.
user1 = searchnode(neo4jconn,'人',“房地产公司”,'姓名',...'适当的价值',“用户1”)
User1 = neo4jode with属性:nodeid:0 nodedata:[1×1 struct] nodelabels:'person'
找到外向的关系User1.
。若要将搜索限制为距离为两个或更少的关系,请指定2.
作为名称值对参数的值'距离'
.
user1_relation=searchRelation(neo4jconn,user1,“出去”,'距离'2)
用户1_关系=结构与字段:起源:0节点:[4×3表]关系:[4×5表]
使用表格user1\u关系节点
,访问名称
属性中显示的每个节点野田
表的变量。
分配表格user1\u关系节点
到无可奈难
.
nodestable=user1\u relation.Nodes
nodeStable =.4×3表NodeLabels Nodedata NodeObject __________ ________________________ 0'个人'[1×1 struct] [1x1 database.neo4j.http.neo4jnode] 1'person'[1×1 struct] [1x1 database.neo4j.http.neo4jnode] 2'person'[1×1 struct] [1x1 database.neo4j.http.neo4jnode] 3'person'[1×1 struct] [1x1 database.neo4j.http.neo4jode]
为表中的每一行指定行名无可奈难
到船名
.
rownames=nodestable.Properties.rownames
船名=4×1单元阵列{'0'} {'1'} {'2'} {'3'}
进入野田
可变的无可奈难
每行。野田
包含一系列结构。
nodedata = [nodestable.nodedata {rownames}]
nodedata =带字段的1×4结构数组:名称
取回名称
字段,索引到数组中。节点名称
是包含节点名称的字符向量的单元格数组。
Nodenames = {nodedata(:)。姓名}
节点名称=1×4单元阵列{'user1'} {'user3'} {'user2'} {'user4'}
创造有向图
对象User1_Graph.
使用Neo4Jstruct2有向图
功能与存储的关系数据用户1_关系
以及存储在中的节点名称节点名称
.
user1_图=NEO4JSTruct2有向图(user1_关系,“NodeNames”,节点名称)
user1_graph=具有以下属性的有向图:边:[4×3表]节点:[4×3表]
要查看图形的视觉表示,请创建一个显示User1_Graph.
.
绘图(用户1_图,“EdgeLabel”,user1_graph.Edges.RelationType)
检索的所有一级好友的列表User1.
.这User1_friend.
变量是包含一级朋友的名称的字符向量的小区数组。
DISP(“User1的朋友是:”)
User1的朋友是:
user1_friend =继承人(User1_Graph,“用户1”)
user1_friend =.2×1单元阵列{'user3'} {'user2'}
找到你的二等朋友User1.
跑继承人
通过循环通过一级朋友列表。用户1\u朋友\u朋友
是包含二级好友名称的字符向量的单元格数组。
user1_friends_friend = {};对于i=1:length(user1\u-friend)user1\u-friends\u-friend=[user1\u-friends\u-friend;...继承者(user1_图,user1_朋友{i});终止DISP('用户1的朋友的朋友是:')
User1的朋友的朋友是:
user1\u friends\u friend=唯一(user1\u friends\u friend)
user1_friends_friend =.2×1单元阵列{'User3'}{'User4'}
使用从二级好友列表中删除已在一级好友列表中的重复项setdiff.
.
finalResult=setdiff(user1\u friends\u friends,user1\u friends);disp('User1'的二级朋友是:')
User1的二级好友包括:
对于i = 1:长度(final.cresult)disp(finalResult {i})终止
User4.
最终结果
是包含二级好友名称的字符向量的单元格数组。此列表删除了一级朋友的名称。
关闭(neo4jconn)
neo4j
|搜索节点
|搜索关系
|继承人
|唯一的
|setdiff.