3

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

这就是我正在尝试的:

println g.v(20020000001901003)

那是给我null。当我尝试这个时:

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

输出是[StartPipe]

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

谢谢!

4

1 回答 1

6

下面是 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]

Note that when doing a lookup with that last line above, there is no explicit syntax to use from Gremlin's perspective to use the index on "name". TinkerGraph automatically detects the use of has() and that the key is "name" and then it uses the index. If it didn't find an index for "name" it would do a full scan of the vertices to find "stephen". All TinkerPop implementations will have similar strategies for doing those kinds of index lookups.

于 2012-11-20T19:37:10.863 回答