gremlin — лучший шаг для использования в качестве фиктивного для инициализации graphtraversal

#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()