主要内容

在社会社区找到朋友的朋友

这个例子展示了如何搜索社会社区找到二级的朋友一个人,使用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.Nodesnodestable

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]

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

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)

另请参阅

|||||

相关的例子

更多关于