использование inject для длинного обхода в gremlin при работе с необязательными полями - PullRequest
0 голосов
/ 12 мая 2019

Я строю длинный обход, чтобы добавить сотни вершин в одном запросе.Я увидел на официальном сайте, что рекомендуемый способ сделать это - вставить список объектов и добавить туда вершины: http://tinkerpop.apache.org/docs/current/recipes/#long-traversals

Однако в моем случае есть много объектов, которые имеют необязательные поля, возьмите примерв официальном документе может быть кто-то, у кого нет свойства 'age' или 'name', я могу использовать для выбора что-то вроде этого:

g.inject().unfold().as('a').addV().choose(select('a').select('age'), property('age', select('a').select('age')))

, но шаг выбора вНептун не оптимизирован, и это добавляет слишком большую задержку для запроса, есть ли другие решения для этого?

1 Ответ

1 голос
/ 13 мая 2019

Уже ответили в списке рассылки gremlin-users, но чтобы закрыть цикл, вот оно снова:

gremlin> g = TinkerGraph.open().traversal()
==>graphtraversalsource[tinkergraph[vertices:0 edges:0], standard]
gremlin> 
gremlin> data = [["name": "Huimin Yang"],
                 ["name": "Daniel Kuppitz", "age": 37]]
==>[name:Huimin Yang]
==>[name:Daniel Kuppitz,age:37]
gremlin> 
gremlin> g.inject(data).unfold().as("m").
           addV("person").as("v").
           select("m").unfold().as("kv").
           select("v").
             property(select("kv").by(keys), select("kv").by(values)).iterate()
gremlin> 
gremlin> g.V().valueMap()
==>[name:[Huimin Yang]]
==>[name:[Daniel Kuppitz],age:[37]]
...