此示例显示如何使用MATLAB®接口搜索一个社交社区以查找一个人的二级朋友到Neo4J®。假设您具有存储在代表社交社区的Neo4j数据库上的图表数据。该数据库有七个节点和八个关系。每个节点只有一个唯一的属性键名称
价值来自User1
通过User7
.每个关系都有类型知道
.
找到二级朋友User1
,使用MATLAB接口的Neo4j和dig
目的。有关MATLAB接口到NEO4J的详细信息,请参阅Neo4j数据库接口的图表数据库工作流程.
本地计算机将Neo4j数据库带到端口号7474.
、用户名neo4j.
和密码matlab
.有关数据库中数据的可视化表示,请参阅此图。
创建一个Neo4j连接对象neo4jconn
使用URL.http:// localhost:7474 / db / data
、用户名neo4j.
和密码matlab
.
url ='http:// localhost:7474 / db / data';用户名='neo4j';密码='matlab';neo4jconn = neo4j (url、用户名、密码);
检查消息
neo4j连接对象的属性neo4jconn
.空白消息
属性表示连接成功。
neo4jconn.message.
ans = []
找到具有节点标签的节点人
使用属性名User1
.
user1 = searchNode (neo4jconn,“人”那'propertykey'那“名字”那......“PropertyValue”那'user1')
NodeData: [1×1 struct] nodelabel: 'Person'
找到外向的关系User1
.要将搜索限制为与两个或多个距离的关系,请指定2
作为名称-值对参数的值“距离”
.
user1_relation = searchrelation(neo4jconn,user1,'出去'那“距离”, 2)
user1_relation =.结构体字段:来源:0节点:[4×3 table]关系:[4×5 table]
使用表格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 '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.roplownames.rownames.
rownames =4×1个单元阵列{'0'} {'1'} {'2'} {'3'}
访问Nodedata.
变量从nodestable
每行。Nodedata.
包含一个结构数组。
(nodestable nodedata =。NodeData {rownames}]
nodedata =1×4结构数组与字段:名称
检索名称
从每个结构,索引到阵列的字段。Nodenames.
是包含节点名称的字符向量的单元格数组。
节点名= {nodedata (:) . name}
Nodenames =.1×4个单元阵列{'User1'} {'User3'} {'User2'} {'User4'}
创建dig
目的user1_graph
使用neo4jstruct2digraph.
函数中存储的关系数据user1_relation.
和存储在的节点名称Nodenames.
.
user1_graph = neo4jstruct2digraph(user1_relation,'nodenames',Nodenames)
user1_graph =带有属性的数字:边缘:[4×3表]节点:[4×3表]
要查看图形的可视表示,请创建一个显示的图形user1_graph
.
绘图(User1_Graph,'Edgelabel',user1_graph.edges.relationtype)
检索所有一级朋友的列表User1
.的user1_friend
Variable是字符向量的单元格数组,其中包含一级好友的名称。
DISP(“用户1的朋友是:”)
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 {i})];结尾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(“用户1的二级朋友是:”)
User1的二级朋友是:
为了i = 1:length(finalResult) disp(finalResult{i})结尾
User4
最后结果
是字符向量的单元格数组,其中包含二级朋友的名字。这个列表删除了一级朋友的名字。
关上(neo4jconn)
neo4j.
|searchnode.
|searchrelation.
|setdiff
|继承人
|独特