在社会邻居中寻找人与人之间的最短路径
这个例子展示了如何搜索一个社会社区,以找到人与人之间的最短路径,使用MATLAB®接口到Neo4j®。假设您拥有存储在Neo4j数据库中的图形数据,该数据库表示一个社会社区。这个数据库有7个节点和8个关系。每个节点只有一个唯一的属性键的名字
取值范围为User1
通过User7
.每个关系都有类型知道
.
找到最短路径User1
而且User7
,使用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 = []
搜索整个图
找到所有人
节点和与每个节点关联的所有关系人
节点使用searchGraph
.
social_graphdata = searchGraph(neo4jconn,{“人”})
social_graphdata =带字段的结构:节点:[7×3 table]关系:[8×5 table]
将图数据转换为有向图
使用表格social_graphdata。节点
,进入的名字
属性中出现的每个节点的NodeData
表的变量。
分配表social_graphdata。节点
来nodestable
.
Nodestable = social_graphdata。节点
nodestable =7×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] 4 'Person' [1×1 struct] [1x1 database.neo4j.http。Neo4jNode] 5 'Person' [1×1 struct] [1x1 database.neo4j.http。Neo4jNode] 9 'Person' [1×1 struct] [1x1 database.neo4j.http.Neo4jNode]
为表中的每一行分配行名nodestable
来rownames
.
rownames = nodestable.Properties.RowNames
rownames =7×1单元格数组{'0'} {'1'} {'2'} {'3'} {'4'} {'5'} {'9'}
访问NodeData
变量的nodestable
对于每一行。nodedata
包含结构的数组。
Nodedata = [nodedestable .]NodeData {rownames}]
nodedata =1×7包含字段的struct数组:的名字
检索的名字
字段从每个结构,索引到数组。节点名
包含节点名称的字符向量的单元格数组。
Nodenames = {nodedata(:).name}
节点名=1×7单元格数组{User1的}{‘User3} {User2的}{‘User4}{‘User5}{‘User6} {' User7 '}
创建有向图
对象social_graph
使用neo4jStruct2Digraph
函数用图形数据存储在social_graphdata
和存储在节点名
.
social_graph = neo4jStruct2Digraph(social_graphdata,的节点名节点名)
social_graph = diggraph with properties: Edges: [8×3 table] Nodes: [7×3 table]
若要查看图形的可视化表示,请创建显示的图形social_graph
.
情节(social_graph“EdgeLabel”social_graph.Edges.RelationType)
寻找最短路径
求两者之间的最短路径User1
而且User7
使用shortestpath
.
[user1_to_user7,distance] =最短路径(social_graph,“User1”,“User7”)
user1_to_user7 =1×5单元格数组{'User1'} {'User3'} {'User4'} {'User6'} {'User7'}
距离= 4
关闭数据库连接
关上(neo4jconn)
另请参阅
neo4j
|searchNode
|searchRelation
|shortestpath