🔵Первые шаги с Neo4j и Cypher

В этом посте мы научимся делать первые шаги в работе с графо-ориентированной базой данных Neo4j и ее языком вычислений Cypher.

  • Что такое графики?
    • Отношения (края)
  • База примеров Movie Graph
  • Свойства узла и отношения
  • Язык запросов Cypher
    • Основные слова
    • Сохранение команд (создание закладок)
  • Создание узлов
    • Создание узла только с идентификатором
    • Создание узла с меткой
    • Создание узла со свойствами
    • Выбор способа отображения узла
    • Использование оператора WHERE
    • Создание структурированных узлов
    • Использование команды CONTAINS
  • Создание взаимоотношений (края)
    • Двунаправленные отношения
    • Поиск взаимоотношений
    • Удаление отношений
    • Использование команды MERGE
    • Задание

Что такое графики?

Согласно Википедии, теория графов — это раздел математики, изучающий отношения между объектами в заданном множестве. Для этого используются структуры, называемые графами, G(V,E), где V — непустое множество объектов, называемых вершинами (или узлами), а E (от английского edges) — подмножество неупорядоченных пар из V.

Отношения (края)

Neo4j часто используется в поисковых и рекомендательных сетях. Например, вы ищете фильм на Netflix и в соответствии с ним получаете рекомендации.

База примеров Movie Graph

Для выполнения следующих шагов вам необходимо установить Neo4j Desktop.

Нажмите на кнопку Пуск:

Нажмите кнопку открыть:

Нажмите на каждый шаг:

Команда :play movie-graph была запрограммирована на отображение экрана, показанного ниже:

После щелчка на стрелке рядом с ним появится команда создания всей базы данных. Вы можете выполнить команду двумя способами:

  1. Вы можете нажать кнопку воспроизведения:

  1. Или вы можете нажать на команду и затем играть:

После этого мы получим следующие данные:

Свойства узла и отношения

Метка и свойства узла:

По сравнению с реляционной базой данных, Label подобен имени таблицы, а properties — столбцам таблицы. properties могут отличаться на каждом узле, поскольку Neo4j — это не структурированная база данных, а база данных nosql.

Типы отношений и их свойства:

После запроса результат ниже показывает два Node Labels и два Relationship Types:

Язык запросов Cypher

Cypher — это язык запросов к диаграммам Neo4j, который позволяет получать данные диаграмм. Вдохновленный SQL, он позволяет сосредоточиться на том, какие данные вы хотите получить из графика (а не на том, как их получить). Это самый простой в изучении язык графики из-за его схожести с другими языками и интуитивности.

Основные слова языка Cypher

Вы можете выполнить команду Neo4j$ :help cypher:

Сохранение команд (избранное)

Вы можете сохранить команды, которые вы используете чаще всего:

Чтобы сохранить команду, просто нажмите кнопку play, чтобы запустить ее, а затем нажмите звездочку:

Сохраните команду «Получить все данные»:

MATCH (n) DETACH DELETE n
Войдите в полноэкранный режим Выход из полноэкранного режима

И сохраните команду для удаления всех данных:

MATCH (n) RETURN n
Войдите в полноэкранный режим Выход из полноэкранного режима

Создание узлов

Сначала удалим все данные из примера Movie Graph с помощью команды:

MATCH (n) DETACH DELETE n
Войдите в полноэкранный режим Выход из полноэкранного режима

У нас не может быть отношений, если у нас нет узлов. Итак, давайте сначала создадим узлы.

Создание узла с одним лишь id

Круглые скобки () представляют узел.

Выполните команду CREATE () для создания узла:

CREATE ()
Войдите в полноэкранный режим Выход из полноэкранного режима

У нас уже есть созданный узел, но без метки и только со свойством id. Для получения всей информации используйте команду:

MATCH (n) RETURN n
Войдите в полноэкранный режим Выход из полноэкранного режима

Заметим, что у нашего узла есть только id:

Мы уже можем создать узел и вернуть его с помощью команды:

CREATE (n) RETURN n
Войдите в полноэкранный режим Выход из полноэкранного режима

Теперь у нас есть узел с идентификатором 1. n — это переменная (представляющая узел), созданная во время выполнения и не будет храниться в памяти для последующего использования; вы можете поставить любое имя вместо n.

Если мы выберем все данные, у нас будет два узла, один с id 0 и один с id 1:

Создание узла с меткой

  1. Все, что создается для узла, будет помещено внутрь ().
  2. Внутри () переменная всегда стоит на первом месте.
  3. С учетом регистра: метка Time будет отличаться от метки time.
CREATE (n :Time) RETURN n
Войдите в полноэкранный режим Выход из полноэкранного режима

Если вы выполните эту команду еще два раза, у нас будет три команды:

Создание узла с двумя метками:

CREATE (n :Time :Basquete) RETURN n
Войдите в полноэкранный режим Выход из полноэкранного режима

Сейчас у нас четыре команды, и одна из них — баскетбольная:

Создание узла со свойствами

Свойства создаются внутри {}.

Создание и возврат с переменной n:

CREATE (n :Time :Futebol {nome: 'Internacional', cor: 'Vermelho e Branco'}) RETURN n
Войдите в полноэкранный режим Выход из полноэкранного режима

Создавать, но не возвращать:

CREATE (:Time :Futebol {nome: 'Grêmio', cor: 'Azul e Preto'})
Войдите в полноэкранный режим Выход из полноэкранного режима

Выбор способа отображения узла

Наши узлы показывают информацию о цветах, но если я хочу, чтобы вместо цветов отображалось название команды?

Нажмите на этикетку:

Нажмите на имя:

Вы можете изменить цвет и размер узла:

Использование команды WHERE

Прежде чем использовать команду WHERE, давайте посмотрим все данные:

MATCH (n) RETURN n
Войдите в полноэкранный режим Выход из полноэкранного режима

Фильтрация по идентификатору:

MATCH (n) WHERE id(n) = 6 RETURN n
Войдите в полноэкранный режим Выход из полноэкранного режима

Фильтрация по метке:

MATCH (n :Time) RETURN n
Войдите в полноэкранный режим Выход из полноэкранного режима

MATCH (n :Time :Futebol) RETURN n
Войдите в полноэкранный режим Выход из полноэкранного режима

Фильтрация по свойствам:

Только id, автоматически созданный Neo4j, будет извлечен с круглыми скобками id(); остальные свойства будут в точечной нотации.

MATCH (n) WHERE n.nome = 'Internacional' RETURN n
Войдите в полноэкранный режим Выход из полноэкранного режима

Фильтрация по метке и свойству:

MATCH (n :Time :Futebol) WHERE n.nome = 'Internacional' RETURN n
Войдите в полноэкранный режим Выход из полноэкранного режима

Фильтрация по двум узлам:

MATCH (i),(g) WHERE i.nome = 'Internacional' AND g.nome = 'Grêmio' RETURN i, g
Войдите в полноэкранный режим Выход из полноэкранного режима

или с этикеткой:

MATCH (i :Time),(g :Futebol) WHERE i.nome = 'Internacional' AND g.nome = 'Grêmio' RETURN i, g
Войдите в полноэкранный режим Выход из полноэкранного режима

Создание структурированных узлов

Сначала удалим все данные с помощью команды delete, которую мы добавили в закладки.

Создание футбольных прогнозов

CREATE (:Selecao {nome: 'Brasil', cor: 'Verde, Amarelo'})

CREATE (:Selecao {nome: 'Argentina', cor: 'Azul, Branco'})

CREATE (:Selecao {nome: 'Uruguai', cor: 'Azul, Branco'})

CREATE (:Selecao {nome: 'Franca', cor: 'Azul, Branco, Vermelho'})

CREATE (:Selecao {nome: 'Espanha', cor: 'Amarelo, Vermelho'})

CREATE (:Selecao {nome: 'Alemanha', cor: 'Amarelo, Vermelho, Preto'})

CREATE (:Selecao {nome: 'Inglaterra', cor: 'Vermelho, Branco'})

CREATE (:Selecao {nome: 'Italia', cor: 'Verde, Vermelho, Branco'})

CREATE (:Selecao {nome: 'EUA', cor: 'Azul, Vermelho, Branco'})

CREATE (:Selecao {nome: 'Japao', cor: 'Vermelho, Branco'})

CREATE (:Selecao {nome: 'Nigeria', cor: 'Verde, Branco'})

CREATE (:Selecao {nome: 'Canada', cor: 'Vermelho, Branco'})

CREATE (:Selecao {nome: 'Colombia', cor: 'Amarelo, Vermelho, Azul'})
Войдите в полноэкранный режим Выход из полноэкранного режима

Создание континентов

CREATE (:Continente {nome: 'America do Sul'})

CREATE (:Continente {nome: 'America do Norte'})

CREATE (:Continente {nome: 'Europa'})

CREATE (:Continente {nome: 'Africa'})

CREATE (:Continente {nome: 'Asia'})
Войдите в полноэкранный режим Выход из полноэкранного режима

Использование команды CONTAINS

В приведенной ниже команде мы выводим все выделения, содержащие красный и белый цвета:

MATCH (n) WHERE n.cor CONTAINS 'Vermelho' AND n.cor CONTAINS 'Branco' RETURN n
Войдите в полноэкранный режим Выход из полноэкранного режима

Создание взаимоотношений (края)

Давайте создадим отношения между Бразилией и Южной Америкой.

MATCH (s :Selecao),(c :Continente)
WHERE s.nome = 'Brasil' and c.nome = 'America do Sul'
RETURN s, c
Войдите в полноэкранный режим Выход из полноэкранного режима

Создание отношения Бразилия принадлежит Южной Америке:

MATCH (s :Selecao),(c :Continente)
WHERE s.nome = 'Brasil' and c.nome = 'America do Sul'
CREATE (s)-[r : Pertence]->(c)
RETURN s, c, r
Войдите в полноэкранный режим Выход из полноэкранного режима

Двунаправленные отношения

Как мы уже говорили, старайтесь избегать двунаправленных отношений и никогда не создавайте их без реальной необходимости.

MATCH (s :Selecao),(c :Continente)
WHERE s.nome = 'Brasil' and c.nome = 'America do Sul'
CREATE (s)<-[r : Contem]-(c)
RETURN s, c, r
Войдите в полноэкранный режим Выход из полноэкранного режима

Поиск отношений

Без уточнения отношений

Когда мы делаем запрос и связи существуют, связи появляются автоматически:

MATCH (s :Selecao),(c :Continente)
WHERE s.nome = 'Brasil' and c.nome = 'America do Sul'
RETURN s, c
Войдите в полноэкранный режим Выход из полноэкранного режима

Определение отношений

MATCH (s :Selecao)-[r :Pertence]->(c :Continente)
WHERE s.nome = 'Brasil' and c.nome = 'America do Sul'
RETURN s, c
Войдите в полноэкранный режим Выход из полноэкранного режима

Удаление отношений (ребер)

Перед удалением всегда запрашивайте информацию, чтобы убедиться, что это действительно та информация, которую вы хотите удалить:

MATCH (s :Selecao),(c :Continente)
WHERE s.nome = 'Brasil' and c.nome = 'America do Sul'
RETURN s, c
Войдите в полноэкранный режим Выход из полноэкранного режима

Отношения появляются, но для того, чтобы иметь возможность удалить отношения, нам нужно ввести их в запрос:

MATCH (s :Selecao)-[r :Pertence]->(c :Continente)
WHERE s.nome = 'Brasil' and c.nome = 'America do Sul'
DELETE r
RETURN s, c
Войдите в полноэкранный режим Выход из полноэкранного режима

Чтобы удалить Contem, просто измените направление стрелки:

MATCH (s :Selecao)<-[r :Contem]-(c :Continente)
WHERE s.nome = 'Brasil' and c.nome = 'America do Sul'
DELETE r
RETURN s, c
Войдите в полноэкранный режим Выход из полноэкранного режима

Использование команды MERGE

Команда MERGE работает аналогично команде CREATE, однако, в отличие от CREATE, MERGE не будет повторять создание, если оно уже существует. Поскольку он выполняет эту проверку, MERGE менее производителен.

В приведенном ниже коде мы просто заменим CREATE на MERGE:

MATCH (s :Selecao),(c :Continente)
WHERE s.nome = 'Brasil' and c.nome = 'America do Sul'
MERGE (s)-[r : Pertence]->(c)
RETURN s, c, r
Войдите в полноэкранный режим Выход из полноэкранного режима

Если мы выполним ту же команду, отношение Pertence не будет создано снова, в отличие от команды CREATE, которая создаст еще одно отношение под названием Pertence.

Задание

В качестве задачи вы можете создать другие отношения. Команда одинакова для всех. Старайтесь создавать команды заранее, без копирования и вставки.

  1. Найдите узлы, к которым вы хотите добавить связь.
  2. Создайте отношения с помощью CREATE или MERGE.

Оцените статью
Procodings.ru
Добавить комментарий