我正在使用以下方式打开图表:
g = new Neo4jGraph('...path...');
然后使用:
添加顶点myVertex = g.addVertex(['type':'X', 'Y':Z]);
我可以看到db之后有一个顶点(使用Gephi) 但是当我跑步时:
if (g.idx(T.v) != null )
它总是返回false。 索引应该以某种方式打开吗? 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上试过这个 - 结果相同。所以我想这是我缺少的东西。
答案 0 :(得分:2)
我认为用Gremlin在Neo4j中创建索引可能会被打破。证据包括针对neo4j,blueprints和the REST plugin提出的问题。即使情况并非如此,Gremlin并没有真正拥有Neo4j中索引的一流权限 - 例如,我上次检查时无法创建全文索引。不确定它是否甚至可以在Neo中创建关系指数。
我使用了Gremlin / Groovy代码段found in the Neo4j docs
neo4j = g.getRawGraph()
idxManager = neo4j.index()
personIndex = idxManager.forNodes('vertices')
我意识到这打破了Gremlin的漂亮抽象层,但之后你可以使用像g.idx('vertices')
这样的Gremlin方法来度过你的一天。
编辑:
要在对Gremlin“可见”索引更改之前获取索引,请尝试以下操作:
import com.tinkerpop.blueprints.pgm.impls.neo4j.Neo4jIndex;
ind = new Neo4jIndex('vertices', Vertex.class, g)
这与我在评论中链接的要点相比,优势在于ind
是一个Gremlin指数,可以应用通常的Gremlin处理的一半。 OTOH,评论中的要点可以完全访问原始索引。
答案 1 :(得分: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手动索引,由Blueprints自动更新以使用{为所有节点(即Vertex
类)编制索引{1}}属性。
取自:https://github.com/neo4j/community/issues/397#issuecomment-5024341
参考:https://github.com/tinkerpop/blueprints/wiki/Graph-Indices