Этот пример показывает, как искать социальное окружение, чтобы найти кратчайший путь между людьми, с помощью интерфейса MATLAB® для Neo4j®. Примите, что у вас есть данные о графике, которые хранятся на базе данных Neo4j, которая представляет социальное окружение. Эта база данных имеет семь узлов и восемь отношений. Каждый узел имеет только один ключ name
уникального свойства со значением в пределах от User1
через User7
. Каждое отношение имеет, вводят knows
.
Чтобы найти кратчайший путь между User1
и User7
, используйте интерфейс MATLAB для Neo4j и объекта digraph
. Для получения дополнительной информации об интерфейсе MATLAB к Neo4j, смотрите Рабочий процесс Базы данных Графика для Интерфейсов БД Neo4j.
Локальная машина размещает базу данных Neo4j с номером порта 7474
, имя пользователя neo4j
и пароль matlab
. Для визуального представления данных в базе данных смотрите эту фигуру.
Создайте объект neo4jconn
связи Neo4j с помощью http://localhost:7474/db/data
URL, имени пользователя neo4j
и пароль matlab
.
url = 'http://localhost:7474/db/data'; username = 'neo4j'; password = 'matlab'; neo4jconn = neo4j(url,username,password);
Проверяйте свойство Message
объекта neo4jconn
связи Neo4j. Пустое свойство Message
указывает на успешную связь.
neo4jconn.Message
ans = []
Найдите все узлы Person
и все отношения сопоставленными с каждым узлом Person
с помощью searchGraph
.
social_graphdata = searchGraph(neo4jconn,{'Person'})
social_graphdata = struct with fields:
Nodes: [7×3 table]
Relations: [8×5 table]
Используя таблицу social_graphdata.Nodes
, получите доступ к свойству name
для каждого узла, который появляется в переменной NodeData
таблицы.
Присвойте таблицу social_graphdata.Nodes
nodestable
.
nodestable = social_graphdata.Nodes
nodestable=7×3 table
NodeLabels NodeData NodeObject
__________ ____________ ___________________________________
0 'Person' [1×1 struct] [1x1 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 cell array
{'0'}
{'1'}
{'2'}
{'3'}
{'4'}
{'5'}
{'9'}
Доступ к переменной NodeData
из nodestable
для каждой строки. nodedata
содержит массив структур.
nodedata = [nodestable.NodeData{rownames}]
nodedata = 1×7 struct array with fields:
name
Чтобы получить поле name
из каждой структуры, индексируйте в массив. nodenames
является массивом ячеек из символьных векторов, который содержит имена узла.
nodenames = {nodedata(:).name}
nodenames = 1×7 cell array
{'User1'} {'User3'} {'User2'} {'User4'} {'User5'} {'User6'} {'User7'}
Создайте объект digraph
social_graph
с помощью функции neo4jStruct2Digraph
с данными о графике, хранимыми в social_graphdata
и именах узла, сохраненных в nodenames
.
social_graph = neo4jStruct2Digraph(social_graphdata,'NodeNames',nodenames)
social_graph = digraph with properties: Edges: [8×3 table] Nodes: [7×3 table]
Чтобы видеть визуальное представление графика, создайте фигуру, которая отображает social_graph
.
plot(social_graph,'EdgeLabel',social_graph.Edges.RelationType)
Найдите кратчайший путь между User1
и User7
с помощью shortestpath
.
[user1_to_user7,distance] = shortestpath(social_graph,'User1','User7')
user1_to_user7 = 1×5 cell array
{'User1'} {'User3'} {'User4'} {'User6'} {'User7'}
distance = 4
close(neo4jconn)
neo4j
| searchNode
| searchRelation
| shortestpath