【问题标题】:Basic Gremlin: look up node properties?基本 Gremlin:查找节点属性?
【发布时间】:2012-11-20 19:04:55
【问题描述】:

Gremlin 初学者问题。我想使用属性名称从图中检索节点,然后打印其所有附加属性。

这就是我正在尝试的:

println g.v(20020000001901003)

这给了我null。当我尝试这个时:

println g.idx('mygraph')[[id:20020000001901003]]

输出是[StartPipe]

如何从StartPipe 获取节点的属性?

谢谢!

【问题讨论】:

    标签: gremlin


    【解决方案1】:

    以下是 Gremlin 终端中使用玩具图和 TinkerPop 2.x 的一些示例(3.x 说明如下)。以下控制台会话显示了如何创建键索引并在其上进行搜索。

    gremlin> g = TinkerGraphFactory.createTinkerGraph()
    ==>tinkergraph[vertices:6 edges:6]
    gremlin> g.createKeyIndex("name",Vertex.class)
    ==>null
    gremlin> g.V("name","marko").name
    ==>marko
    gremlin> g.V("name","marko").map
    ==>{age=29, name=marko}
    

    您应该注意g.v(20020000001901003) 为您返回 null 的原因是因为该函数尝试根据图中元素的唯一标识符而不是您分配的标识符来查找顶点(很少有图支持用户分配id ...他们通常生成自己的)。考虑以下我使用分配的标识符来访问顶点的情况:

    gremlin> g.V("name","marko")
    ==>v[1]
    gremlin> g.v(1).map
    ==>{age=29, name=marko}
    

    如果您创建了手动索引,那么您将使用您所引用的 g.idx 语法。这是一个例子:

    gremlin> idx = g.createIndex("my-index",Vertex.class)
    ==>index[my-index:Vertex]
    gremlin> idx.put("id", 1000, g.v(1))
    ==>null
    gremlin> g.idx("my-index")[[id:1000]]
    ==>v[1]
    

    我假设您没有使用 Gremlin 终端,因此您需要迭代该启动管道。您可能会做一些事情,例如将其发送到列表:

    gremlin> x=[];g.idx("my-index")[[id:1000]].fill(x)
    ==>v[1]
    gremlin> x.size()
    ==>1
    

    TinkerPop 3.x 中没有对索引的 TinkerPop 抽象。您必须使用底层图数据库规定的索引创建方法。例如,在 neo4j 中,您将使用一些 Cypher 语法。使用 TinkerGraph,只有一个 createIndex() 方法。可以看到它的用法如下:

    gremlin> graph = TinkerGraph.open()
    ==>tinkergraph[vertices:0 edges:0]
    gremlin> graph.createIndex('name',Vertex.class)
    gremlin> g = graph.traversal()
    ==>graphtraversalsource[tinkergraph[vertices:0 edges:0], standard]
    gremlin> g.addV('name','stephen')
    ==>v[0]
    gremlin> g.addV('name','steve')
    ==>v[2]
    gremlin> g.V().has('name','stephen')
    ==>v[0]
    

    请注意,在使用上面最后一行进行查找时,从 Gremlin 的角度来看,没有明确的语法可以使用“name”上的索引。 TinkerGraph 自动检测到has() 的使用,并且键是“名称”,然后它使用索引。如果它没有找到“name”的索引,它将对顶点进行全面扫描以找到“stephen”。所有 TinkerPop 实现都将具有类似的 strategies 来进行此类索引查找。

    【讨论】:

    • 这在最新的 Gremlin 中不起作用。关于如何使用 TinkerPop 3 的任何指示?
    • 更新了我对 TinkerPop 3.x 的回答
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多