2013-08-12 3 views
0

Я играл с Neo4j и имею проблему, для которой у меня нет решения, поэтому мой вопрос здесь.Neo4j: Множественные комбинации отношений между узлами

Для моей конкретной проблемы я опишу упрощенную версию, которая отражает суть. Предположим, у меня есть график местоположений, которые соединены либо непосредственно, либо через объезд:

  • прямой: (А) - [: GOES_TO] -> (В)
  • непрямого: (А) -> [: GOES_THROUGH] -> (C) - [: COMES_BACK_TO] -> (B)

Если я хочу, чтобы все между "Go" и "Finish" с отношениями GOES_TO я могу легко использовать Cypher запрос:

START a=node:NODE_IDX(Id = "Go"), b=node:NODE_IDX(Id = "Finish) 
MATCH a-[r:GOES_TO*]->b 
RETURN a,r,b 

Здесь NODE_IDX является индексом на узлах (Id) ,

Где я застрял, когда я хочу иметь все пути между «Go» и «Finish», которые не являются отношениями GOES_TO, а скорее несколькими комбинациями отношений GOES_THROUGH ->() -> COMES_BACK_TO (переменной глубины) ,

Я не хочу отфильтровывать отношения GOES_TO, потому что между узлами существует гораздо больше связей, и я не хочу убирать их все (динамически). Возможно ли, чтобы я предусмотрел MATCH с переменной глубиной, многосвязностью?

Спасибо!

+0

это не совсем похоже? http://stackoverflow.com/questions/14104682/cypher-query-finding-all-paths-between-two-nodes-filtered-by-relationship-prope –

+0

Нет, не совсем. Я ищу что-то вроде '(a) - [([: GOES_THROUH] ->() - [: COMES_BACK_TO]) *] -> (b)', т. Е. Я хочу повторить не одно отношение, которое будет '[: RELATIONSHIP *]', но комбинация нескольких в определенном шаблоне. – devnull

+0

Я только что заметил эту группу (https://groups.google.com/forum/#!topic/neo4j/MIb2uCcJy1I), где задан тот же вопрос. Кажется, в настоящее время в Cypher нет поддержки такого типа запросов. Очень жаль! – devnull

ответ

0

Позвольте мне повторить то, что, как мне кажется, предлагается.

"If there is a path of the form (a)-[:X]->(b), find all other paths from a to b." 

Ответ прост:

MATCH p=(a)-[:X]->(b), q=(a)-[r*]->(b) 
WHERE p<>q 
RETURN r; 
Смежные вопросы