我正在使用 neo4j 2.0 存储大量数据。使用 ruby 脚本生成大量数据并保存在 graphml 文件中,然后使用 Gremlin 导入 neo4j。
g.loadGraphML('graphml.xml')
在 neo4j 2.0 中,我想利用节点上的标签新的很酷的支持。是否可以通过这种方式指定节点应该具有哪些标签?或者我真的必须事后对所有节点进行查询,设置它们的标签。
谢谢
我不相信有一种方法,至少在 内部Blueprints
,它是 Gremlin 所基于的接口。我看不到label
为a 添加 a 的方法Vertex
,在 GraphML 中也看不到类似的东西。
也许 Neo4j 会更新他们的代码以将标签放入Vertex
蓝图中的属性中,但目前无法使用 Gremlin/Tinkerpop 获取/设置标签。
还应该注意的是,Blueprints 仅支持我们所知道的 Neo4j 的稳定版本,因此 Blueprints 还不能完全支持里程碑 2.0 之类的东西。
如果您使用的是 Neo4j 版本 2,您可以通过从 Blueprint Vertex 获取底层 Neo4j 节点来设置标签。请注意,这会破坏封装并增加对 Neo4j 的依赖,但这可能是必需的。此外,由于最新版本的蓝图存在问题,我仍然无法正确使用此代码,但这就是它的工作方式。
import com.tinkerpop.blueprints.Vertex;
import com.tinkerpop.blueprints.impls.neo4j.Neo4jGraph;
import com.tinkerpop.blueprints.impls.neo4j.Neo4jVertex;
import org.neo4j.graphdb.Node;
// ...
Vertex vertex = graph.addVertex(null);
Neo4jVertex neo4jVertex = (Neo4jVertex) vertex;
Node node = neo4jVertex.getRawVertex();
node.addLabel("SomeLabel");