Фильтрация узлов из списка значений в запросе gremlin - PullRequest
0 голосов
/ 08 июня 2018

Предположим, у меня есть список значений атрибутов в виде ArrayList. Как я могу фильтровать узлы по значениям в списке.

Возможно ли что-то подобное ...

g.V().filter {it.get().value("name") in list}

и совместим ли он с TinkerPop 2.x

Ответы [ 2 ]

0 голосов
/ 12 июня 2018

Использование шага filter() может работать:

gremlin> [ 'Titan' : Titan.version(), 'TinkerPop' : Gremlin.version()]
==>Titan=0.5.4
==>TinkerPop=2.5.0
gremlin> g = TitanFactory.open('inmemory')
==>titangraph[inmemory:[127.0.0.1]]
gremlin> v0 = g.addVertex().setProperty('name', 'amith')
==>null
gremlin> v1 = g.addVertex().setProperty('name', 'jason')
==>null
gremlin> v2 = g.addVertex().setProperty('name', 'stephen')
==>null
gremlin> g.commit()
==>null
gremlin> l = ['amith', 'jason', 'florian'] // list to match
==>amith
==>jason
==>florian
gremlin> g.V().filter{ l.contains(it.getProperty('name')) }.map()
15:06:30 WARN  com.thinkaurelius.titan.graphdb.transaction.StandardTitanTx  - Query requires iterating over all vertices [()]. For better performance, use indexes
==>{name=amith}
==>{name=jason}

Имейте в виду, что Titan 0.5.4 довольно устарел (выпущен в феврале 2015 года) и зависит от TinkerPop2.5.0 (выпущено в апреле 2014 г.).Titan и TinkerPop 2.x больше не находятся в активной разработке.

Вам следует рассмотреть возможность перехода к JanusGraph , который является вилкой Titan, имеет активную иоткрытое сообщество и постоянно обновляется до Apache TinkerPop 3.x .

.
0 голосов
/ 09 июня 2018

Вы можете просто использовать шаг has для фильтрации, так как он может принимать список значений благодаря предикату within:

gremlin> g = TinkerFactory.createModern().traversal()
==>graphtraversalsource[tinkergraph[vertices:6 edges:6], standard]
gremlin> names=['josh','peter']; g.V().has('name', within(names))
==>v[4]
==>v[6]

edit: My answerна самом деле больше не решает вопрос, так как теперь запрашивает решение TinkerPop 2.Я все еще оставляю это здесь на тот случай, если кто-нибудь наткнется на этот вопрос, ища решение для TinkerPop 3.

...