Сопоставьте узел со всеми узлами подграфа в шифре

Я развлекаюсь с Neo4j, и мне нужно знать, как найти узлы, которые связаны с каждым из узлов данного подграфа.

Поясним это на примере:

(У меня около 15000 узлов в моей базе данных)

Теперь, учитывая подграф (c1:Thing),(c2:Thing),...(cn:Thing), я хочу знать все узлы, которые не являются ни одним из (c1),...,(cn), но они иметь отношение с каждым узлом (c1),...,(cn)

Другими словами, я бы нашел Cj, где существуют отношения: (Cj)-[r1]-(c1) . . . (Cj)-[rn]-(сп)

И j не в {1, ...., n}

Посмотрите на это изображение, чтобы увидеть пример

Итак, в основном я хочу СООТВЕТСТВОВАТЬ узлам, таким как c6, тем, которые связаны с каждым из узлов подграфа (узлы выделены красным).

ПРИМЕЧАНИЕ. В указанном подграфе может быть любое количество узлов (n — переменная величина).

Моя первая мысль:

ПОИСКПОЗ (c1:Вещь)-[r1]-(предложить:Вещь), (c2:Вещь)-[r2]-(предложить:Вещь), .... ,(cn:Вещь)-[rn]-(предложить :Thing) ГДЕ c1.id=1 И ..... И cn.id=n И НЕ(предложить.id IN [1, ...., n]) ВОЗВРАТ c1, r1, ...... , сп, р-н, предложить;

Но это действительно отстой, когда у нас есть большое число "n".

Не могли бы вы помочь мне?

Спасибо, и хорошего дня!


person Federico Castro    schedule 29.07.2014    source источник


Ответы (1)


Далее следует способ решения вашего вопроса, делая некоторые предположения о моделировании данных.

Запрос, подобный этому, скорее всего, даст вам то, что вы хотите:

MATCH p=(n:Thing)-[:RELATED_TO]->(n2), (suggest:Thing)
WHERE n <> n2 AND NOT suggest IN nodes(p) AND ALL (x IN nodes(p) WHERE (suggest)-[:RELATED_TO]->(x))
RETURN suggest

Теперь это предполагает, что интересующие подграфы (т. е. от c1 до cn) связаны одним и тем же отношением. Конечно, вы можете определить путь/подграф по своему усмотрению, и еще лучше было бы знать начальную и конечную точки, но эта информация может быть у вас под рукой, а может и не быть. Кроме того, если вы делаете пути/подграфы разной длины, будьте осторожны, чтобы ограничить их. Кроме того, если вы рассматриваете пути/подграфы разной длины, результаты, которые вы получите, потенциально не будут уникальными.

Другое предположение состоит в том, что (предложить) имеет такое же отношение к каждому узлу подграфа и имеет тот же тип, что и отношения в вашем подграфе. Настройте это по мере необходимости.

Тем не менее, этого должно быть достаточно, чтобы вы начали и/или думали в правильном направлении. Как всегда, то, как вы моделируете свои данные, так же важно, как и то, как вы пишете свои запросы, если не более того.

ХТН

person BtySgtMajor    schedule 29.07.2014