Введение
Neo4j и другие графовые базы данных становятся все более популярными благодаря их способности хранить и обрабатывать огромные и сложные структуры данных. В частности, работа с графическими данными и выполнение сложных операций над ними упрощается благодаря языку запросов Neo4j, Cypher. В этой статье блога мы рассмотрим некоторые из основных запросов Neo4j Cypher.
Способность Cypher с легкостью выполнять сложные запросы является одним из его основных преимуществ. Язык предоставляет разнообразный набор операторов, функций и функций агрегирования для выполнения сложных вычислений и манипуляций с данными графа. Например, вы можете использовать Cypher, чтобы найти кратчайший путь между двумя узлами, рассчитать среднее значение свойства по всем узлам или подсчитать количество узлов, соответствующих определенным критериям.
Создание узлов и соединений
Одной из основных операций, доступных в Neo4j, является создание узлов и ассоциаций. Чтобы построить узел с меткой «Человек» и значениями «имя» и «возраст», используйте следующий запрос.
CREATE (p:Person {name: 'John Doe', age: 30})
Узел с меткой «Человек» и значениями «имя» и «возраст» создается с помощью вышеупомянутого запроса. Для установления соединения между двумя узлами можно использовать следующее выражение:
MATCH (a:Person), (b: Person) WHERE a.name ='John Doe' AND b.name = 'Jane Doe' CREATE (a) - [:FRIENDS] -> (b)
Вышеупомянутый запрос устанавливает связь между двумя узлами с метками «Человек» и присваивает связи атрибут «ДРУЗЬЯ».
Возвращение узлов и отношений
Еще одним важным действием Neo4j является извлечение узлов и ассоциаций. Чтобы найти каждый узел с меткой «Человек», выполните следующий поиск:
MATCH (p: Person) RETURN p
Вышеупомянутый поиск извлекает все узлы с меткой «Человек». Мы можем использовать следующий поиск, чтобы найти все соединения между узлами с меткой «Человек»:
MATCH (a:Person) - [r]->(b: Person) RETURN r
Вышеупомянутый запрос извлекает все соединения между узлами, в которых есть метка «Человек».
Обновления узлов и отношений
Еще одна важная функция в Neo4j — обновление узлов и соединений. Свойство узла можно обновить, выполнив следующий запрос:
MATCH ( p:Person {name: 'John Doe'})
SET p.age = 40
RETURN p
Вышеупомянутый запрос изменяет атрибут age узла с именем John Doe. Используйте следующую формулу для обновления свойства отношения:
MATCH ( a: Person)-[r :FRIENDS]->(b:Person) SET r.since = '2020' RETURN r
Вышеупомянутый запрос изменяет атрибут отношения «с тех пор» для типа отношения «ДРУЗЬЯ». Узлы и отношения могут быть удалены. Еще одно важное действие Neo4j — удаление узлов и ссылок. Чтобы удалить узел с меткой «Person» и свойством «name», равным «John Doe», используйте следующий запрос:
MATCH (p:Person {name: 'John Doe'})
DELETE p
Вышеупомянутый запрос исключает узел, у которого свойство «имя» равно «Джон Доу» и метка «Человек». Используя следующую формулу, мы можем удалить связь:
MATCH (a:Person)-[r:FRIENDS]->(b: Person) DELETE r
Вышеупомянутый запрос удаляет ассоциацию дружбы между двумя узлами с меткой «Человек» между ними.
Поиск кратчайших путей в графах с помощью Cypher
Cypher также поддерживает широкий спектр операций и функций, связанных с графами, таких как алгоритмы поиска пути, создание и удаление узлов и связей, а также алгоритмы обхода. Например, следующий запрос Cypher находит кратчайший путь между двумя узлами с метками «Человек» и «Фильм» и возвращает узлы и отношения, образующие этот путь:
MATCH path = shortestPath((p:Person)-[*]-(m:Movie)) WHERE p.name = 'Tom Hanks' AND m.title = 'The Matrix' RETURN path
В этом запросе функция shortestPath используется для поиска кратчайшего пути между двумя узлами, соответствующими шаблону (p:Person)-[*]-(m:Movie). Предложение WHERE накладывает дополнительные ограничения на эти узлы (в этом примере имя узла человека должно быть «Том Хэнкс», а название узла фильма должно быть «Матрица»). Наконец, предложение RETURN указывает, какие данные (в данном примере узлы и отношения, составляющие кратчайший путь) должны быть возвращены.
Кратчайшие пути между двумя узлами в графе можно найти с помощью Cypher в дополнение к запросу конкретных узлов и соединений. Поиск кратчайшего пути между двумя идеями в сети знаний или кратчайшего пути между двумя точками на карте — это всего лишь два примера многих применений этого метода.
Используйте метод ShortestPath() Cypher, чтобы определить кратчайший маршрут между любыми двумя узлами в сети Neo4j. Используя метки «Person» и определенное значение свойства name, следующий пример поиска ищет кратчайший путь между двумя узлами:
MATCH (p1:Person {name: 'Alice '}), (p2:PersoN {name: 'Bob'7)
MATCH path = shortestPath((p1)-[*]-(p2))
RETURN path
В этом запросе узлы с метками «Person» и предоставленными значениями свойства name сначала находятся с помощью предложений MATCH. Кратчайший путь между этими двумя узлами затем определяется с помощью метода shortestPath() и сохраняется в переменной пути. Кратчайший путь затем возвращается как последовательность узлов и отношений в переменной пути.
Примечательно, что метод shortestPath() использует эвристический метод, а не полностью исследует все потенциальные пути, чтобы быстро получить приближение кратчайшего пути. Несмотря на то, что он может пропустить некоторые реальные кратчайшие пути, этот метод может быть намного быстрее, чем полный перебор, особенно для больших графов.
В целом, поиск кратчайших путей в графах Neo4j с использованием Cypher может быть полезным мощным инструментом, который служит примером адаптивности и гибкости языка запросов Neo4j Cypher.
Еще одной ключевой характеристикой Cypher является поддержка транзакций. Транзакции позволяют объединить ряд операций в единую единицу работы, которая может выполняться атомарно. Это означает, что либо все действия транзакции, либо ни одно из них не будут успешными. Транзакции имеют решающее значение в графовой базе данных для обеспечения целостности и согласованности данных, особенно в многопользовательском сценарии, когда разные пользователи могут одновременно получать доступ и редактировать одни и те же данные.
Заключение
Наконец, Cypher — мощный и удобный язык запросов, упрощающий работу с графическими данными в Neo4j. Neo4j становится все более популярным вариантом для предприятий, работающих с графическими данными, благодаря его способности хранить и обрабатывать огромные и сложные структуры данных. Разработчики и специалисты по данным могут получить полезную информацию из своих графических данных и улучшить свои навыки принятия решений, используя запросы Cypher. Он предоставляет широкий спектр операций и функций, которые упрощают сложные запросы и манипуляции с данными графа. Cypher также должен быть простым в использовании и понимании, имея простой и понятный синтаксис, основанный на сопоставлении с образцом. Cypher предоставляет простой и мощный способ взаимодействия с вашими данными и получения максимальной отдачи от вашей базы данных графиков, независимо от того, мала она или обширна.