1

我正在使用以下方法打开图表:

g = new Neo4jGraph('...path...');

然后使用以下方法添加顶点:

myVertex = g.addVertex(['type':'X', 'Y':Z]);

之后我可以看到数据库有一个顶点(使用 Gephi)但是当我运行时:

if (g.idx(T.v) != null )

它总是返回假。是否应该以某种方式打开索引?Gremlin 是否需要特定的 Neo4j 版本?

添加一些日志信息:

...
==>v[22092]
==>v[22093]
==>v[22094]
==>v[22095]
gremlin> g.idx(T.v)
==>null
gremlin> g.idx("vertices")
==>null
gremlin> g.indices
gremlin>

在 Gremlin 1.3 上试过这个 - 结果相同。所以我想这是我想念的东西。

4

2 回答 2

2

我认为使用 Gremlin 在 Neo4j 中创建索引可能会被破坏。证据包括针对neo4j蓝图REST 插件提出的问题。即使不是这种情况,Gremlin 也没有对 Neo4j 中索引的一流访问权限——例如​​,上次我检查时它无法创建全文索引。不确定它是否甚至可以在 Neo 中创建关系索引。

我使用Neo4j 文档中的 Gremlin/Groovy 片段

neo4j = g.getRawGraph()
idxManager = neo4j.index()
personIndex = idxManager.forNodes('vertices')

我意识到这破坏了 Gremlin 的好抽象层,但之后您可以使用 Gremlin 方法(如g.idx('vertices').

编辑:

要在索引更改对 Gremlin“可见”之前获取索引,请尝试以下操作:

import com.tinkerpop.blueprints.pgm.impls.neo4j.Neo4jIndex;
ind = new Neo4jIndex('vertices', Vertex.class, g)

与我在评论中链接的要点相比,它的优势在于它ind是一个 Gremlin 索引,并且可以应用通常的 Gremlin 处理的一半。OTOH,评论中的要点可以完全访问原始索引。

于 2012-01-22T20:47:23.823 回答
0

如何在 Neo4j Web 控制台中使用 Gremlin 创建 Neo4j 索引:

gremlin> g.createManualIndex('test2', Vertex.class)
==> MANUAL[test2:Vertex]
gremlin> test2=g.idx('test2')
==> MANUAL[test2:Vertex]
gremlin> hendy=g.v(1673)
==> v[1673]
gremlin> hendy.name
==> Hendy Irawan
gremlin> test2.put('name', 'Hendy Irawan', hendy)
==>
gremlin> test2.get('name', 'Hendy Irawan')
==> v[1673]

注意:g.createAutomaticIndex()不会像大多数人在这里所期望的那样,它将创建一个 Neo4j 手动索引,该索引由蓝图自动更新,以索引Vertex具有name属性的所有节点(即类)。

取自:https ://github.com/neo4j/community/issues/397#issuecomment-5024341

参考:https ://github.com/tinkerpop/blueprints/wiki/Graph-Indices

于 2012-04-09T12:27:32.563 回答