TinkerPop: фильтр по числу ребер с определенным свойством - PullRequest
0 голосов
/ 27 марта 2019

Со следующей диаграммой:

ДИАГРАММА

Я хочу получить пользователей, у которых есть как минимум два поста в местоположении 2.

Я пытался посчитать фильтрацию ребер по его свойствам, но ничего не происходит:

g.V().hasLabel("user").outE('POST').outV().filter(outE('LOCATED_AT').limit(2).has('country_code', 'CZ').count().is_(2)).count().toList()

Запрос фактически возвращает тайм-аут.Я потратил много часов, чтобы найти способ сделать это, но никто не может повторить этот запрос.

1 Ответ

0 голосов
/ 28 марта 2019

Получите пользователей, у которых есть хотя бы два поста в расположении 2:

from gremlin_python.structure.graph import Graph
from gremlin_python.process.traversal import T, Column, P
from gremlin_python.process.graph_traversal import __

g.V().hasLabel("user").filter(__.outE('POST').inV().out('LOCATED_AT').has('country_code', 'CZ').groupCount().unfold().select(Column.values).is_(P.gte(2))).toList()

На вашей диаграмме не удалось выяснить, куда поместить свойство country_code, поэтому код для генерации графа:

g.addV('user').property('Id', 1).property(T.id, '11').iterate()
g.addV('user').property('Id', 2).property(T.id, '12').iterate()

g.addV('media').property('Id', 1).property(T.id, '21').iterate()
g.addV('media').property('Id', 2).property(T.id, '22').iterate()
g.addV('media').property('Id', 3).property(T.id, '23').iterate()
g.addV('media').property('Id', 4).property(T.id, '24').iterate()

g.addV('location').property('Id', 1).property(T.id, '31').property('country_code', 'CZ').iterate()
g.addV('location').property('Id', 2).property(T.id, '32').property('country_code', 'CZ').iterate()
g.addV('location').property('Id', 3).property(T.id, '33').property('country_code', 'CZ').iterate()

g.addE('POST').from_(g.V('11')).to(g.V('21')).iterate()
g.addE('POST').from_(g.V('11')).to(g.V('22')).iterate()
g.addE('POST').from_(g.V('11')).to(g.V('23')).iterate()
g.addE('POST').from_(g.V('12')).to(g.V('24')).iterate()

g.addE('LOCATED_AT').from_(g.V('21')).to(g.V('31')).iterate()
g.addE('LOCATED_AT').from_(g.V('22')).to(g.V('32')).iterate()
g.addE('LOCATED_AT').from_(g.V('23')).to(g.V('32')).iterate()
g.addE('LOCATED_AT').from_(g.V('24')).to(g.V('32')).iterate()
g.addE('LOCATED_AT').from_(g.V('24')).to(g.V('33')).iterate()
...