2016-02-17 4 views
0

Из учебника:Neo4j: кратчайшие пути сдерживаются узлов и отн свойств

СПИЧКА р = shortestPath ((Keanu: Человек) - [: KNOWS *] - (Kevin: Лицо)) ГДЕ keanu.name = «Keanu Reeves» и kevin.name = «Kevin Bacon» RETURN length (p)

Представьте, что каждый персональный узел имеет возрастную категорию и профессию. Каждый край KNOWS обладает свойством «длины знакомства».

Что Cypher запрос возвращал бы кратчайший путь с, например, возраст> 40 лет нет (род занятий = АКТЕР) lengthOfAcquaintance> 10 лет

В данных молекулярной биологии взаимодействия, мы хотим сделать еще более сложные запросы - вероятно, от того, какой шифр хорошо справляется, но как меня ускользает. Например:

Найти кратчайшие пути между молекулой рецептора А и транскрипционным фактором В, где большинство ребер являются результатом мелкомасштабных экспериментов, большинство генов аннотируются как киназы, а доказательство (вес) для краев больше, чем 0,5

Эти запросы, вероятно, возникают во множестве настроек. Может ли кто-нибудь указать мне на чтения и примеры, которые помогут мне понять, как это делается? И, может быть, обеспечить небольшое расширение запроса «Номер бекона», который вмещает одно свойство узла и одного края?

Спасибо!

  • Пол

ответ

2

Я думаю, что то, что вы ищете является ALL predicate.

Вот несколько примеров его использования:

ShortestPath, где все участники пути должны иметь возраст> 40:

MATCH p=shortestPath((keanu:Person)-[:KNOWS*]-(kevin:Person)) 
WHERE keanu.name = "Keanu Reeves" 
AND kevin.name = "Kevin Bacon" 
AND ALL(x IN nodes(p) WHERE x.age > 40) 
RETURN p 

ShortestPath, где все ребра должны иметь lengthOfAcquaintance> 10

MATCH p=shortestPath((keanu:Person)-[:KNOWS*]-(kevin:Person)) 
WHERE keanu.name = "Keanu Reeves" 
AND kevin.name = "Kevin Bacon" 
AND ALL(x in rels(p) WHERE x.lengthOfAcquaintance > 10 
RETURN p 

конечно, вы можете комбинировать оба:

MATCH p=shortestPath((keanu:Person)-[:KNOWS*]-(kevin:Person)) 
WHERE keanu.name = "Keanu Reeves" 
AND kevin.name = "Kevin Bacon" 
AND ALL(x in rels(p) WHERE x.lengthOfAcquaintance > 10 
AND ALL(x in nodes(p) WHERE x.age > 40 
RETURN p 
+0

Большое спасибо, Кристоф! Элегантное решение, красиво представленное. –

Смежные вопросы