2011-12-02 131 views
0

你好,我正在尝试创建一个简单的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); 

问题是,它会为找到的每个名字,我的理解是我的代码,告诉它做一个节点。我真正想要的是它创建一个节点,如果其中一个名称不存在的话。如果其中一个名称存在,则将其链接到它存在的两个文档中。

任何想法?

回答

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