Neo4j节点链接

时间:2011-12-02 18:13:23

标签: java neo4j

您好我正在尝试创建一个简单的neo4j数据库。我有一个for循环,为目录中的每个文件创建一个新节点

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);

问题是它为每个找到的名称创建了一个Node,我理解这是我的代码告诉它要做的事情。我真正想要的是它创建一个节点如果其中一个名称尚未存在。如果其中一个名称确实存在,则将其链接到它所存在的两个文档中。

任何想法??

1 个答案:

答案 0 :(得分:1)

您想使用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*");