#java #gremlin #tinkerpop #graph-traversal
#java #gremlin #tinkerpop #обход графика
Вопрос:
Пытаюсь динамически построить graphtraversal, но у меня вопрос о том, как инициализировать обход с помощью фиктивного шага. Я использую inject() в качестве фиктивного шага, кто-нибудь знает, причинит ли это какой-либо вред или предложит лучший шаг для использования в качестве фиктивного.
псевдокод: fn setVertexProperties(свойства): final GraphTraversal<вершина, вершина> gt = __.inject(); foreach((k,v)-> gt.property(k,v)); end fn
Спасибо
Комментарии:
1. Я предоставил ответ ниже. Ваш псевдокод немного сбивает с толку, поскольку
property
шаг должен быть применен к вершине. Я рад расширить свой ответ, если вы можете немного уточнить свой псевдокод. Есть способы, например, заполнить обход картой вершин и свойств, которые могут быть полезны в зависимости от вашего конкретного варианта использования.2. Прежде всего, мне понравилась ваша книга «Практический Гремлин», и я рекомендую ее всем, кто хочет изучить Gremlin. Что касается моего вопроса. Спасибо @KelvinLawrence. Да, в addV() добавляются только свойства идентификатора, остальные добавляются отдельно с помощью функции, поэтому вопрос. это полный обход: GraphTraversal tv = g.V().vertexfilterstep().fold().coalesce(unfold(), addV(«label»).property(«idprop1»,v1).property(«idprop2», v2)); вершина v = tv.union(nonidpropertytraversal).next(); я пишу общую функцию Java для добавления свойств, отличных от id, которые включают простые, мульти- и мета-свойства.
Ответ №1:
Если вы создаете обход динамически в коде, тогда использование inject
подойдет.
В более конкретных терминах обычно делается что-то подобное:
t = g.inject(0)
t.addV('A')
t.addV('B')
t.iterate()
inject
Шаг дает a DefaultGraphTraversal
, к которому могут быть добавлены другие шаги.
Если вы знаете, что ваш обход будет выполнять много, скажем, addV
шагов, тогда другой способ — просто выполнить один addV
для создания объекта обхода. Как в:
t = g.addV('A')
t.addV('B')
t.addV('C')
t.iterate()