В этом примере показано, как добавить группу коллег, хранящихся в виде ориентированного графа, к группе друзей в социальном районе, хранящихся в виде узлов и отношений в базе данных Neo4j ®. Затем в примере показано, как запросить график в базе данных с помощью языка запросов Cypher ®, который позволяет создавать пользовательские запросы.
Для получения дополнительной информации об интерфейсе MATLAB ® к Neo4j, смотрите Рабочий процесс для Neo4j интерфейсов базы данных в Graph Database.
Предположим, что у вас есть графовые данные, хранящиеся в Neo4j базе данных, которая представляет социальную окрестность. Эта база данных имеет семь узлов и восемь отношений. Каждый узел имеет только один уникальный ключ свойств name
со значением в диапазоне от User1
через User7
. Каждая связь имеет тип knows
.
Локальный компьютер размещает базу данных 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 = []
Задайте группу четырех коллег путем создания ориентированного графа в MATLAB. Создайте digraph
объект, который имеет четыре узла и три ребер.
s = [1 1 1]; t = [2 3 4]; G = digraph(s,t);
Задайте имена для узлов.
G.Nodes.name = {'User8';'User9';'User10';'User11'};
Постройте график для просмотра узлов и ребер.
plot(G)
Сохраните ориентированный граф как Neo4j графиков. Задайте две метки для всех узлов на полученном графике Neo4j при помощи GlobalNodeLabel
аргумент пары "имя-значение". Кроме того, укажите тип works with
для всех отношений в получившемся графику Neo4j при помощи GlobalRelationType
аргумент пары "имя-значение".
graphinfo = storeDigraph(neo4jconn,G, ... 'GlobalNodeLabel',{'Colleague','Person'}, ... 'GlobalRelationType','works with');
Отображение меток узлов первого узла в графике.
graphinfo.Nodes.NodeLabels{1}
ans = 2×1 cell array
{'Person' }
{'Colleague'}
Результатом является массив ячеек из векторов символов. Каждый вектор символов является меткой узла для первого узла.
Отобразите отношения в графике.
graphinfo.Relations
ans=3×5 table
StartNodeID RelationType EndNodeID RelationData RelationObject
___________ ____________ _________ ____________ _______________________________________
20 31 'works with' 8 [1×1 struct] [1x1 database.neo4j.http.Neo4jRelation]
23 31 'works with' 32 [1×1 struct] [1x1 database.neo4j.http.Neo4jRelation]
24 31 'works with' 33 [1×1 struct] [1x1 database.neo4j.http.Neo4jRelation]
Relations
- таблица, содержащая следующие переменные:
Запустите идентификатор узла
Тип отношения
Идентификатор конечного узла
Данные о взаимоотношениях
Neo4jRelation
объект
Поиск узлов с меткой узла Person
и ключ свойства name
установите в значения User7
и User8
при помощи Neo4j подключения к базе данных.
nlabel = 'Person'; user7 = searchNode(neo4jconn,nlabel,'PropertyKey','name', ... 'PropertyValue','User7'); user8 = searchNode(neo4jconn,nlabel,'PropertyKey','name', ... 'PropertyValue','User8');
Добавьте отношение между узлами User7
и User8
подключить группу коллег к группе друзей.
relationtype = 'knows';
relation = createRelation(neo4jconn,user7,user8,relationtype);
Отобразите получившийся график в базе данных Neo4j.
Создайте запрос Cypher, чтобы найти людей, которые работают с людьми User7
знает. Отображать имена этих людей.
query = ['MATCH (:Person {name: "User7"})-[:knows]->(:Person)-[:`works with`]' ... '->(potentialContact:Person) RETURN potentialContact.name']; results = executeCypher(neo4jconn,query)
results=3×1 table
potentialContact_name
_____________________
'User11'
'User10'
'User9'
User9
, User10
, и User11
все работают с кем-то, кто User7
знает. User7
знает User8
, кто работает с User9
, User10
, и User11
.
close(neo4jconn)