В этом примере показано, как с помощью интерфейса MATLAB ® с Neo4j ® найти кратчайший путь между людьми в социальной области. Предположим, что имеются графические данные, которые хранятся в базе данных Neo4j, представляющей социальный район. Эта база данных имеет семь узлов и восемь взаимосвязей. Каждый узел имеет только один уникальный ключ свойстваname со значением в диапазоне от User1 через User7. Каждая связь имеет тип knows.
Поиск кратчайшего пути между User1 и User7, используйте интерфейс MATLAB для Neo4j и digraph объект. Дополнительные сведения об интерфейсе MATLAB для Neo4j см. в разделе Рабочий процесс базы данных Graph для интерфейсов базы данных Neo4j.
На локальном компьютере размещена база данных Neo4j с номером порта 7474Имя пользователя neo4j, и пароль matlab. Визуальное представление данных в базе данных см. на этом рисунке.
Создание объекта Neo4j соединения neo4jconn с использованием URL-адреса http://localhost:7474/db/dataИмя пользователя neo4j, и пароль matlab.
url = 'http://localhost:7474/db/data'; username = 'neo4j'; password = 'matlab'; neo4jconn = neo4j(url,username,password);
Проверьте Message свойство объекта подключения Neo4j neo4jconn. Бланк 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