Neo4j节点链接
问题描述:
你好,我正在尝试创建一个简单的neo4j数据库。我有一个for循环,为目录中的每个文件创建一个新节点Neo4j节点链接
for(file f : files){
Node document = graphDb.createNode();
document.setProperty("name", f.toString().trim());
graphDb.getReferenceNode().createRelationshipTo(document, MatrixRelationshipTypes.REFRENCE);
工作正常。然后,我想创建一个节点在文件中的每个名称:
Node pName = graphDb.createNode();
pName.setProperty("name", name.toString());
pName.createRelationshipTo(document, MatrixRelationshipTypes.CONTAINS_NAME);
问题是,它会为找到的每个名字,我的理解是我的代码,告诉它做一个节点。我真正想要的是它创建一个节点,如果其中一个名称不存在的话。如果其中一个名称存在,则将其链接到它存在的两个文档中。
任何想法?
答
您想使用index。也有auto-indexes处理索引(在你的交易结束时)。
Index<Node> nameIndex = graphDb.index().forNodes("names");
public Node getOrCreateNode(String name) {
Node found = nameIndex.get("name",name).getSingle();
if (found!=null) return found;
Node nameNode = graphDb.createNode();
nameNode.setProperty("name",name);
nameIndex.add(nameNode, "name", name);
return nameNode;
}
然后,您还可以使用通配符(Lucene搜索语法)查询节点索引。
IndexHits<Node> nodes = nameIndex.query("name:Jo*");