0

我一直在尝试使用 neo4jphp [ https://github.com/jadell/neo4jphp/wiki]为我们的新模块创建节点和关系船。

我正在使用密码查询。

使用以下查询创建节点:

$queryNodes = "CREATE (n:User { props } ) ";
$query      = new Everyman\Neo4j\Cypher\Query($client, $queryNodes, array('props' => $arrNodeProperties));
$result     = $query->getResultSet();

使用以下查询创建关系:

$queryRelations = "
   MATCH (authUser: User { userid: 0001 }),(friend)
     WHERE friend.userid IN ['" . implode("','",$relations) . "']
        CREATE UNIQUE (authUser)-[r:KNOWS { connection: 'user_friend' }]->(friend)";

到目前为止,节点创建工作 gr8。

但是当我尝试为节点创建唯一关系时,它需要很长时间......

注意:标签 User 有唯一的约束 userid,因此带有标签 user 的节点由 Neo4j 在属性 userid 上索引。

CREATE CONSTRAINT ON (user:User) ASSERT user.userid IS UNIQUE

问题:

  1. 有没有其他方法可以实现创建独特的关系。
  2. 我可以在关系上使用索引吗?如果是,我怎样才能达到同样的效果。
4

2 回答 2

1

您可以尝试使用 useMERGE而不是CREATE UNIQUE. 此外,对 Fried 列表使用 Cypher 参数,而不是在客户端连接,请参阅http://docs.neo4j.org/chunked/stable/cypher-parameters.html

于 2014-10-11T17:23:42.270 回答
0

最后我做了一些改变......

感谢@MichaelHunger 的帮助。

所以这就是我是如何做到的......

使用 MERGE、FOREACH、ON CREATE SET 和参数创建唯一节点:

$queryNodes = "
    FOREACH (nodeData IN {nodeProperties}|
        MERGE (n:User { userid: nodeData.userid })
            ON CREATE SET
                n.login = nodeData.login,
                n.userid = nodeData.userid,
                n.username = nodeData.username,
                n.name = nodeData.name,
                n.gender = nodeData.gender,
                n.profile_pic = nodeData.profile_pic,
                n.create_date = timestamp()
            ON MATCH SET
                n.update_date = timestamp()
    )
";
$query = new Everyman\Neo4j\Cypher\Query($client, $queryNodes, array('nodeProperties' => $arrNodeProperties));
$result = $query->getResultSet();

使用以下查询创建唯一关系:

$queryRelations = "
    MATCH (authUser: User { userid: {authUserid} }), (friend:User)
        WHERE friend.userid IN {friendUserIds}
    CREATE UNIQUE (authUser)-[r:KNOWS { connection: 'user_friend' }]->(friend)
";
$query  = new Everyman\Neo4j\Cypher\Query($client, $queryRelations, array('friendUserIds' => $arrFriendUserId, 'authUserid' => $authUserid));
$result = $query->getResultSet();

如果我们可以进一步改进,请发表评论。

于 2014-10-14T09:59:49.257 回答