2015-05-28 2 views
1

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

Следующие индивидуальные запросы все работы по назначению и дают ожидаемые результаты:

1) Возврат набор тренировок и средств массовой информации для каждого:

MATCH (w:Workout)-[:hasMedia]->(m:Media) RETURN w.name as workout, collect(m.url) AS media

2) Возврат набор тренировок и типы тренировки для каждого:

MATCH (w:Workout)-[:hasConcept]->(wt:Concept)-[:ofType]->(Category{name:"training"}) RETURN w.name AS workout, collect(wt.name) AS workoutType

3) Возврат набор горе rkouts и тело фокусируются для каждого:

MATCH (w:Workout)-[:hasConcept]->(bf:Concept)-[:ofType]->(Category{name:"bodyfocus"}) RETURN w.name AS workout, collect(bf.name) AS bodyFocus

Кроме того, у меня есть множество людей с узлами отношения к тренировкам.

Следующий запрос работает, как предполагался, и дает ожидаемые результаты:

A) возвращаемый набор тренировок, имеющее отношение к конкретному человеку и почему (оценка, доказательства):

MATCH (Person{personId:"1028"})-[r:hasAffinity]->(c:Concept)<-[s]-(w:Workout) RETURN sum(toFloat(r.score)*toFloat(s.score))/count(c) AS score, w.name AS workout, collect({text:c.name, polarity:r.score, evidenceId:c.name}) AS evidence

Я «Я пытаюсь сделать (и терпит неудачу), приходит к одному составному запросу, который отвечает на следующее:« верните набор соответствующих тренировок для человека со счетом, доказательствами, средствами массовой информации, типами тренировок и фокусами для каждой тренировки » ,

Кажется, что я хочу: MATCH {Путь A} С w MATCH w- {остальная часть пути 1}, w- {остальная часть пути 2}, w- {остальная часть пути 3} RETURN {A's stuff}, {1's stuff}, {2's stuff}, {3's stuff}

... но я не могу заставить это работать (и как новичок может ошибаться в отношении подхода в любом случае). Помогите?

+0

Можете ли вы сделать вашу сеть? Было бы намного проще понять, какой запрос вам нужен. –

ответ

0

Я думаю, что это то, что вам нужно объединить все в одном запросе:

// get the Workouts of a Person via the Concept 
MATCH (p:Person {personId:"1028"})-[r:hasAffinity]->(c:Concept)<-[s]-(w:Workout) 

// take the Person and Workout to the next step, calculate score and collect evidence 
WITH DISTINCT p, w, sum(toFloat(r.score)*toFloat(s.score))/count(c) AS score, 
    collect({text:c.name, polarity:r.score, evidenceId:c.name}) AS evidence 

// Match everything else for the workout 
MATCH (w)-[:hasConcept]->(wt:Concept)-[:ofType]->(:Category {name:"training"}) 
MATCH (w)-[:hasConcept]->(bf:Concept)-[:ofType]->(:Category {name:"bodyfocus"}) 
MATCH (w)-[:hasMedia]->(m:Media) 

// Return everything (score and evidence are available from the WITH statement) 
RETURN p.personID, w.name AS workout, collect(wt.name) AS workoutType, 
    collect(bf.name) AS bodyFocus, collect(m.url) AS media, score, evidence 
Смежные вопросы