主要内容

在社交社区中寻找朋友的朋友

这个例子展示了如何使用Neo4j®的MATLAB®接口搜索一个社会社区来查找一个人的二级朋友。假设您拥有存储在Neo4j数据库中的图形数据,该数据库表示一个社会社区。这个数据库有7个节点和8个关系。每个节点只有一个唯一的属性键的名字取值范围为User1通过User7.每个关系都有类型知道

去找二级朋友User1,使用MATLAB接口来实现Neo4j和有向图对象。关于Neo4j的MATLAB接口,请参见Neo4j数据库接口的图形数据库工作流

本地机器承载带有端口号的Neo4j数据库7474,用户名neo4j,和密码matlab.有关数据库中数据的可视化表示,请参见该图。

连接到Neo4j数据库

创建一个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]

为表中的每一行分配行名nodestablerownames

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)

另请参阅

|||||

相关的例子

更多关于