这个例子展示了如何使用Neo4j®的MATLAB®接口搜索一个社会社区来查找一个人的二级朋友。假设您拥有存储在Neo4j数据库中的图形数据,该数据库表示一个社会社区。这个数据库有7个节点和8个关系。每个节点只有一个唯一的属性键的名字
取值范围为User1
通过User7
.每个关系都有类型知道
.
去找二级朋友User1
,使用MATLAB接口来实现Neo4j和有向图
对象。关于Neo4j的MATLAB接口,请参见Neo4j数据库接口的图形数据库工作流.
本地机器承载带有端口号的Neo4j数据库7474
,用户名neo4j
,和密码matlab
.有关数据库中数据的可视化表示,请参见该图。
创建一个Neo4j连接对象neo4jconn
使用URLhttp://localhost:7474/db/data
,用户名neo4j
,和密码matlab
.
url =“http://localhost: 7474 / db /数据”;用户名=“neo4j”;密码=matlab的;Neo4jconn = neo4j(url,用户名,密码);
检查消息
属性的Neo4j连接对象neo4jconn
.空白的消息
属性指示连接成功。
neo4jconn。消息
Ans = []
找到带有节点标签的节点人
属性名User1
.
user1 = searchNode(neo4jconn,“人”,“PropertyKey”,“名字”,...“PropertyValue”,“User1”)
user1 = Neo4jNode,属性:NodeID: 0 NodeData: [1×1 struct] NodeLabels: 'Person'
寻找外向的人际关系User1
.若要将搜索限制为距离为2或更少的关系,请指定2
作为名称-值对参数的值“距离”
.
user1_relation = searchRelation(neo4jconn,user1,“出”,“距离”, 2)
user1_relation =带字段的结构:节点数:[4×3 table]关联关系:[4×5 table]
使用表格user1_relation。节点
,进入的名字
属性中出现的每个节点的NodeData
表的变量。
分配表user1_relation。节点
来nodestable
.
Nodestable = user1_relation。节点
nodestable =4×3表NodeLabels NodeData NodeObject __________ ____________ ___________________________________ 0“人”[1×1 struct] [1 x1 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.Neo4jNode]
为表中的每一行分配行名nodestable
来rownames
.
rownames = nodestable.Properties.RowNames
rownames =4×1单元格数组{'0'} {'1'} {'2'} {'3'}
访问NodeData
变量的nodestable
对于每一行。nodedata
包含结构的数组。
Nodedata = [nodedestable .]NodeData {rownames}]
nodedata =1×4包含字段的struct数组:的名字
检索的名字
字段从每个结构,索引到数组。节点名
包含节点名称的字符向量的单元格数组。
Nodenames = {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 (用户1的朋友是:)
User1的好友有:
User1_friend = (user1_graph,“User1”)
user1_friend =2×1单元格数组{' User3} {User2的}
去找二级朋友User1
、运行继任者
同样通过遍历一级好友列表。user1_friends_friend
包含二级朋友的名称的字符向量单元格数组。
User1_friends_friend = {};为I = 1:length(user1_friend) user1_friends_friend = [user1_friends_friend;...继任者(user1_graph user1_friend{我})];结束disp (用户1的朋友的朋友是:)
用户1的朋友的朋友是:
User1_friends_friend = unique(User1_friends_friend)
user1_friends_friend =2×1单元格数组{' User3} {' User4 '}
从二级好友列表中删除已经在一级好友列表中的副本setdiff
.
finalResult = setdiff(user1_friends_friend,user1_friend);disp (用户1的二级朋友是)
User1的二级朋友是:
为i = 1:长度(finalResult) disp(finalResult{i})结束
User4
finalResult
包含二级朋友的名称的字符向量单元格数组。这个列表删除了一级朋友的名字。
关上(neo4jconn)
neo4j
|searchNode
|searchRelation
|继任者
|独特的
|setdiff