Получение вершин, которые связаны со ВСЕМИ текущими вершинами - PullRequest
0 голосов
/ 06 сентября 2018

Возможно, я задаю очевидный вопрос, но плохо знаком с графиками и языком гремлинов и немного застрял.

У меня есть настройка графа, где я могу найти N вершин определенного типа. Допустим, я нахожу 2 вершины типа X. Эти вершины имеют ребра для K вершин типа Y.

Я хочу найти вершины типа Y, все из которых имеют связь с 3 вершинами типа X, которые я нашел для типа X. В этой ситуации вершины типа Y могут быть связаны с любой из 3 вершин типа X, но я хочу получить только общие.

Скрипт для создания примера данных `` `

g.addV("X1").property("name", "category1")
g.addV("X2").property("name", "category2")


g.addV("Y").property("name", "y1")
g.addV("Y").property("name", "y2")
g.addV("Y").property("name", "y3")


g.V().has("Y", "name", "y1").addE("isOf").to(g.V().has("X1", "name", "category1"))
g.V().has("Y", "name", "y1").addE("isOf").to(g.V().has("X2", "name", "category2"))

g.V().has("Y", "name", "y2").addE("isOf").to(g.V().has("X1", "name", "category1"))
g.V().has("Y", "name", "y2").addE("isOf").to(g.V().has("X2", "name", "category2"))

g.V().has("Y", "name", "y3").addE("isOf").to(g.V().has("X1", "name", "category1"))

`` `

И что меня интересует, так это поиск вершин "Y", имеющих isOf category1 и category2 и, возможно, больше категорий. Мне нужно исключить вершины Y, которые связаны только с подмножеством указанных категорий.

enter image description here

1 Ответ

0 голосов
/ 07 сентября 2018

Объедините все исходные вершины в коллекции с именем x, затем перейдите ко всем y вершинам и убедитесь, что каждая y вершина имеет n количество ребер, ведущих к вершинам, хранящимся в x (где n равняется размеру x).

gremlin> g.V().hasLabel("X1","X2").aggregate("x").
           in("isOf").dedup().
           filter(out("isOf").where(within("x")).count().
                  where(eq("x")).
                    by().
                    by(count(local))).
           valueMap()
==>[name:[y1]]
==>[name:[y2]]
...