Добавьте и запросите группу коллег в социальном окружении

Этот пример показывает, как добавить группу коллег, сохраненных как ориентированный граф, группе друзей в социальном окружении, сохраненном как узлы и отношения в базе данных Neo4j®. Пример затем показывает, как запросить график в базе данных при помощи языка запросов Cypher®, который позволяет вам создать пользовательские запросы.

Для получения дополнительной информации об интерфейсе MATLAB® к Neo4j, смотрите Рабочий процесс Базы данных Графика для Интерфейсов БД Neo4j.

Примите, что вам сохранили данные о графике в базе данных Neo4j, которая представляет социальное окружение. Эта база данных имеет семь узлов и восемь отношений. Каждый узел имеет только один ключ name уникального свойства со значением в пределах от User1 через User7. Каждое отношение имеет тип knows.

Локальная машина размещает базу данных Neo4j с номером порта 7474, имя пользователя neo4j и пароль matlab. Эта фигура обеспечивает визуальное представление данных в базе данных.

Соединитесь с базой данных Neo4j

Создайте объект 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 =

     []

Создайте ориентированного графа

Задайте группу из четырех коллег путем создания ориентированного графа в 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. Задайте две метки для всех узлов в получившемся графике 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.

Выполните запрос шифра на базе данных Neo4j

Создайте запрос Шифра, чтобы найти людей, которые работают с людьми, которых знает 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)

Смотрите также

|

Похожие темы

Внешние веб-сайты