Neo4j Cypher — как запросить «унаследованные» отношения на дочернем узле?

#neo4j #neo4j-cql

#neo4j #neo4j-cql

Вопрос:

Я хочу использовать Cypher для запроса всех спецификаций, которые являются достоверными для продукта, но со спецификациями, определенными на разных родительских уровнях продукта.

У меня есть модель данных, которая представляет дерево категоризации продукта с уровнями C1, C2, C3, … и на самом низком уровне продукты P. Чтобы упростить обслуживание и ввод данных спецификаций продукта, действительность спецификаций продукта определяется на уровнях категоризации. Продукты «наследуют» спецификации, которые действительны для всех их родительских категорий, вплоть до корня дерева категоризации.

(Упрощенная) модель данных показана на рисунке. В этом случае спецификации продукта определены для уровней категоризации C1, C2 и C3. Продукт подключен к самому низкому уровню категоризации C3. Моя цель — запросить все спецификации, которые действительны для продукта P, на основе их отношения к уровням категоризации C1, C2 и C3.

графовая модель

У меня есть следующие вопросы:

  1. Возможно ли это с помощью одного запроса Cypher?
  2. Какова наилучшая стратегия запроса в большой базе данных? Использовать запрос? Создайте реальные отношения для всех допустимых спецификаций для продукта вместо запроса «унаследованных» спецификаций?
  3. Изменить модель данных?

Другие советы?

Спасибо

Ответ №1:

Вы могли бы найти все спецификации продукта, сопоставляя шаблоны переменной длины.

Предполагая, что у вас есть параметр productId , вы бы использовали что-то вроде этого

 MATCH (p:PRODUCT {productId:$productiId)-[:BELONGS_TO*]->(c:Category)<-[:VALID_FOR]-(s:Specification)
RETURN s
  

чтобы получить соответствующие спецификации.

Поскольку вы, похоже, работаете над спецификациями, некоторые вещи, на которые вы, возможно, захотите взглянуть:

Управление сложными спецификациями продукта путем разбиения его на «атомы» https://www.slideshare.net/neo4j/graphtour-neo4j-murrelektronik

и

Пример того, как вы можете отслеживать версии вашей спецификации: https://www.youtube.com/watch?v=7iMraBHtTqE

Раскрытие информации: Я являюсь членом команды Graphileon и участвую в том, что показано в слайд-деке и видео.

Комментарии:

1. Спасибо! ‘*’ за отношением «BELONGS_TO», указывающее на соответствие шаблона переменной длины , сделало свое дело. Мне нужно потратить некоторое время, чтобы прочитать все руководство по шифрованию 🙂