gpt4 book ai didi

php - Neo4j - 尽管使用合并但重复

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:02:50 27 4
gpt4 key购买 nike

我正在尝试通过 Neo4JPHP 使用 MERGE 语句生成数据库。我所有的查询都使用 MERGE;然而,它每次都会生成单独的节点,从而导致大量重复。

查询在单个事务中运行。我删除了周围的代码以专注于查询:

$transaction = $client->beginTransaction();

while(...) {
$pq = new Query($client, 'MERGE (n:Page {url:"'.$page.'"}) SET n.title="'.$title.'"');
$transaction->addStatements(array($pageQuery));

$h1Query = new Query($client, 'MATCH (n:Page {url:"'.$page.'"}) SET n.h1s = "['.implode(", ", $h1s).']"');
$transaction->addStatements(array($h1Query));

$scriptQuery = new Query($client, 'MATCH (n:Page {url:"'.$page.'"}) MERGE (n)-[:CONTAINS_SCRIPT]->(s:Script {url:"'.$s.'"})');
$transaction->addStatements(array($scriptQuery));

$styleQuery = new Query($client, 'MATCH (n:Page {url:"'.$page.'"}) MERGE (n)-[:CONTAINS_STYLESHEET]->(s:StyleSheet {url:"'.$s.'"})');
$transaction->addStatements(array($styleQuery));

$otherPageQuery = new Query($client, 'MATCH (n:Page {url:"'.$page.'"}) MERGE (n)-[:LINKS_TO]->(m:Page {url:"'.$match.'"})');
$transaction->addStatements(array($otherPageQuery));
}

$transaction->commit();

现在,在几个页面上运行它之后,它会得到相同 Page 的 6 个副本,一个带有 titleh1s 元素,其余没有。

我也尝试过使用 CREATE UNIQUE,但这给出了语法不受支持的错误。

我正在运行 Neo4j 2.0.1。有什么建议吗?

最佳答案

当您使用 MERGE 匹配 Cypher 中的关系时,将匹配或创建整个对象。当找不到匹配项时,将创建整个对象。

例如:

MERGE (n:Page { url: "http://www.neo4j.org" })
RETURN n

获取或创建属性 url 设置为 http://www.neo4j.orgPage。此语句永远不会创建重复节点。

现在假设该节点现在存在于 Neo4j 数据库中,然后我们运行以下查询:

MERGE (n:Page { url: "http://www.neo4j.org" })-[:CONNECTED_TO]->(test:Test { id: "test" })
RETURN *

这将尝试匹配整个模式,如果它不存在,它将创建整个路径,而不管 Page 节点是否存在。

要解决您的问题,请确保您首先使用 MERGE 获取或创建您的个人节点。然后您可以使用 MERGE 来获取或创建两个节点之间的关系。

例子:

MERGE (n:Page { url: "http://www.neo4j.org" })
MERGE (s:StyleSheet { url: "http://www.neo4j.org/styles/main.css" })
MERGE (n)-[:CONTAINS_STYLESHEET]->(s)
RETURN *

关于php - Neo4j - 尽管使用合并但重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22520418/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com