在社会社区找到朋友的朋友
这个例子展示了如何搜索社会社区找到二级的朋友一个人,使用MATLAB®接口Neo4j®。假设您有图的数据存储在一个数据库Neo4j代表社会社区。该数据库有7个节点和8个关系。每个节点只有一个惟一的属性键的名字
从与一个值User1
通过User7
。每个关系类型知道
。
发现二级的朋友User1
,使用MATLAB接口Neo4j和有向图
对象。Neo4j MATLAB接口的详细信息,请参阅图形数据库的工作流Neo4j数据库接口。
Neo4j数据库本地计算机主机和端口号7474年
、用户名neo4j
和密码matlab
。对数据库中数据的可视化表示,看到这个图。
连接到Neo4j数据库
创建一个Neo4j连接对象neo4jconn
使用URLhttp://localhost: 7474 / db /数据
、用户名neo4j
和密码matlab
。
url =“http://localhost: 7474 / db /数据”;用户名=“neo4j”;密码=matlab的;neo4jconn = neo4j (url、用户名、密码);
检查消息
Neo4j连接对象的属性neo4jconn
。空白的消息
属性表示连接成功。
neo4jconn.Message
ans = []
寻找一个人在数据库
查找节点的节点标签人
的属性名User1
。
user1 = searchNode (neo4jconn,“人”,“PropertyKey”,“名字”,…“PropertyValue”,“User1”)
user1 = Neo4jNode属性:NodeID: 0 NodeData: [1×1 struct] NodeLabels:‘人’
搜索所有二级朋友的人
寻找即将离任的关系User1
。限制搜索与距离的关系的两个或更少,指定2
作为名称-值对的值的参数“距离”
。
user1_relation = searchRelation (neo4jconn user1,“出”,“距离”,2)
user1_relation =结构体字段:产地:0节点:[4×3表]关系:[4×5表)
图形数据转换为有向图
使用的表user1_relation.Nodes
,访问的名字
为每个节点属性中出现NodeData
表的变量。
分配表user1_relation.Nodes
来nodestable
。
nodestable = user1_relation.Nodes
nodestable =4×3表NodeLabels NodeData NodeObject __________ _______ ___________________________________ 0“人”[1×1 struct] [1 x1 database.neo4j.http。Neo4jNode] 1“人”[1×1 struct] [1 x1 database.neo4j.http。Neo4jNode] 2“人”[1×1 struct] [1 x1 database.neo4j.http。Neo4jNode] 3 '人' [1×1 struct] [1 x1 database.neo4j.http.Neo4jNode]
分配表中的每一行的行名称nodestable
来rownames
。
rownames = nodestable.Properties.RowNames
rownames =4×1单元阵列{' 0 '}{1}{' 2 '}{' 3 '}
访问NodeData
变量的nodestable
为每一行。nodedata
包含一个结构数组。
nodedata = [nodestable.NodeData {rownames}]
nodedata =1×4结构体数组字段:的名字
检索的名字
从每个结构,数组的索引。节点名
是一个单元阵列特征向量包含节点的名称。
节点名= {nodedata (:) . name}
节点名=1×4单元阵列{' User1} {‘User3} {User2的}{' User4 '}
创建有向图
对象user1_graph
使用neo4jStruct2Digraph
数据存储在函数的关系user1_relation
和节点名称存储在节点名
。
user1_graph = neo4jStruct2Digraph (user1_relation,的节点名节点名)
user1_graph =有向图的属性:边缘:[4×3表]节点:[4×3表)
看到一个图的可视化表示,创建一个图显示user1_graph
。
情节(user1_graph“EdgeLabel”user1_graph.Edges.RelationType)
找朋友的人
检索所有的一级朋友的列表User1
。的user1_friend
变量是一个单元阵列特征向量包含一级的朋友的名字。
disp (“朋友User1的:”)
User1的朋友是:
user1_friend =继任者(user1_graph,“User1”)
user1_friend =2×1单元阵列{' User3} {User2的}
找二级朋友
发现二级的朋友User1
、运行继任者
再通过一级朋友列表循环。user1_friends_friend
是一个单元阵列的特征向量包含二级朋友的名字。
user1_friends_friend = {};为i = 1:长度(user1_friend) user1_friends_friend = [user1_friends_friend;…继任者(user1_graph user1_friend{我})];结束disp (User1的朋友”年代的朋友们:)
User1的朋友的朋友是:
user1_friends_friend =独特(user1_friends_friend)
user1_friends_friend =2×1单元阵列{' User3} {' User4 '}
删除重复的朋友
从二级好友列表中删除副本已经在一级使用好友列表setdiff
。
finalResult = setdiff (user1_friends_friend user1_friend);disp (User1”年代二级的朋友们:)
User1的二级的朋友们:
为i = 1:长度(finalResult) disp (finalResult{我})结束
User4
finalResult
是一个单元阵列的特征向量包含二级朋友的名字。这个列表删除一级的朋友的名字。
关闭数据库连接
关上(neo4jconn)
另请参阅
neo4j
|searchNode
|searchRelation
|继任者
|独特的
|setdiff