主要内容

在社区中寻找朋友的朋友

这个例子展示了如何使用MATLAB®的Neo4j®接口来搜索一个社交社区来找到一个人的二级朋友。假设您有一个图形数据存储在代表一个社会社区的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、用户名、密码);

检查消息属性neo4jconn.空白的消息属性表示连接成功。

neo4jconn。消息
ans = []

在数据库中搜索一个人

找到具有节点标签的节点使用属性名User1

user1 = searchNode (neo4jconn,“人”“PropertyKey”“名字”...“PropertyValue”“User1”
NodeData: [1×1 struct] nodelabel: 'Person'

搜索所有的二级朋友的人

找到外向的关系User1.若要将搜索限制为距离小于等于2的关系,请指定2作为名称-值对参数的值“距离”

user1_relation = searchRelation (neo4jconn user1,“出”“距离”, 2)
user1_relation =结构体字段:来源:0节点:[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包含一个结构数组。

(nodestable nodedata =。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 = diggraph with properties: Edges: [4×3 table] Nodes: [4×3 table]

要查看图形的可视化表示,请创建显示的图形user1_graph

情节(user1_graph“EdgeLabel”user1_graph.Edges.RelationType)

结交朋友

检索的所有一级朋友的列表User1.的user1_friendVariable是字符向量的单元格数组,其中包含一级好友的名称。

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的朋友的朋友是:
User1的朋友的朋友是:
user1_friends_friend =独特(user1_friends_friend)
user1_friends_friend =2×1单元阵列{' User3} {' User4 '}

删除重复的朋友

从二级好友列表中删除已经在一级好友列表中使用的副本setdiff

finalResult = setdiff (user1_friends_friend user1_friend);disp (“用户1的二级朋友是:”
用户1的二级朋友是:
i = 1:length(finalResult) disp(finalResult{i})结束
User4

finalResult是字符向量的单元格数组,其中包含二级朋友的名字。这个列表删除了一级朋友的名字。

关闭数据库连接

关上(neo4jconn)

另请参阅

|||||

相关的例子

更多关于