2014-10-10 7 views
1

Я просто импортировал английскую Википедию в Neo4j, и я играю вокруг. Я начал с поиска страниц, которые ссылаются на страницу «Берлин»Neo4j: Как ограничить подзапросы

MATCH p=(p1:Page {title:"Berlin"})<-[*1..1]-(otherPage) 
WITH nodes(p) as neighbors 
LIMIT 500 
RETURN DISTINCT neighbors 

Это работает очень хорошо. То, что я хотел бы достичь, это показать вторую степень отношений. Чтобы иметь возможность правильно отображать их, я хотел бы ограничить количество узлов отношений первой степени до 20 и затем запросить следующий уровень отношений.

Как достичь этого?

ответ

2

Я не знаю модель Википедии, но я предполагаю, что существует много разных типов отношений, и именно поэтому это - [* 1..1] -, я думаю, что аналогично - [] - или даже --. Я сомневаюсь, что это имеет какое-то серьезное влияние.

Вы можете собрать совпадения первого уровня и ограничить их до 20 с помощью WITH с LIMIT. Затем вы можете выполнить второе совпадение с помощью этих (< 20) других страниц в качестве начальной точки.

MATCH (p1:Page {title:"Berlin"})<-[*1..1]-(otherPage:Page) 
WITH p1, otherPage 
LIMIT 20 
MATCH (otherPage)<-[*1..1]-(secondDegree:Page) 
WHERE secondDegree <> p1 
WITH otherPage, secondDegree 
LIMIT 500 
RETURN otherPage, COLLECT(secondDegree) 

Есть много способов вернуть данные, это просто возвращает совпадение первой степени с массивом последующих совпадений.

Если единственный тип отношений: Ссылка и вы хотите сохранить начальный узел, то вы можете изменить запрос к этому:

MATCH (p1:Page {title:"Berlin"})<-[:Link]-(otherPage:Page) 
WITH p1, otherPage 
LIMIT 20 
MATCH (otherPage)<-[:Link]-(secondDegree:Page) 
WHERE secondDegree <> p1 
WITH p1, otherPage, secondDegree 
LIMIT 500 
RETURN p1, otherPage, COLLECT(secondDegree) 
+0

Спасибо. Структура очень проста (в моей модели). Это всего лишь один тип отношения «: Link». Ваше решение, похоже, возвращает только прямых соседей и соседей второй степени. Но упускает из себя первый стартовый узел, который будет Берлином. Есть ли способ изменить это? –

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