Я пытаюсь найти отношения между узлами с необязательными, но определенными узлами/отношениями между ними (neo4j 2.0 M6).neo4j: необязательные «шаги» в запросе Cypher
В моей модели данных 'Gene' может быть 'PARTOF' a 'Group. У меня есть отношения «INTERACT» между «Gene» - «Gene», «Gene» - «Group» и «Group» - «Group» (красные линии в образце модели).
Я хочу сварить это до всех отношений «ИНТЕРАКТ» между «Джин»: оба прямые (Gene-INTERACT-Gene)
и через одну или две «группы» (Gene-PARTOF-Group-INTERACT-Gene)
.
Конечно, это легко с несколькими Cypher запросов:
# direct INTERACT
MATCH (g1:Gene)-[r:INTERACT]-(g2:Gene) RETURN g1, g2
# INTERACT via one Group
MATCH (g1:Gene)-[:PARTOF]-(gr:Group)-[r:INTERACT]-(g2:Gene) RETURN g1, g2
# INTERACT via two Group
MATCH (g1:Gene)-[:PARTOF]-(gr1:Group)-[r:INTERACT]-(gr2:Group)-[:PARTOF]-(g2:Gene)
RETURN g1, g2
Но было бы возможно построить один Cypher запрос, который принимает дополнительные 'шаги группы' на пути? До сих пор я использовал только необязательные отношения и shortestPaths
, но я понятия не имею, могу ли я фильтровать один или два дополнительных узла между двумя генами.
+10 для ваших генов! Кажется, это работает. Сегодня пятница, и я не верю себе. Данные реальной жизни более сложны, но я думаю, что я могу справиться с проблемой gr1/gr2 с фильтрацией свойств, которые являются истинными как для Gene, так и для Group. –
Что я такого не понимаю, это КАК этот матч «Gene-PARTOF-Group-INTERACTS-Group-PARTOF-Gene», потому что последним шагом является INTERACT ... –
Вы правы, это пятница днем (и это не соответствует этому случаю). '[ИНТЕРАКТ]' в середине не должен быть факультативным, и последнее отношение должно быть '[PARTOF * 0..1]', я думаю, – jjaderberg