苦苦挣扎于Cypher&创造独特

时间:2013-07-06 20:19:06

标签: php graph neo4j

我正在从文本文件中读取足球比赛数据,并希望创建比赛和裁判节点。我希望逻辑工作的方式是我创建一个匹配节点,然后我获得裁判名称并且仅在该裁判尚不存在的情况下创建裁判节点否则我只是将现有裁判链接到匹配。我目前没有根节点,我不确定是否应该创建一个(图形建模非常新)。

我有以下查询,其中我认为我很接近但不在那里。

$match= $client->makeNode();
$match->setProperty('label', "match: ".$feed['match_number'])
      ->setProperty('type', "match")->save();

//现在创建了匹配节点,让我们看看Feed中当前的裁判是否已经存在

$queryString = "START match=node({nodeId}) ".   <----- NEED TO LOOK AT ALL CASES?????
"CREATE UNIQUE (referee{label:{name}, type:'referee'})-[:REFEREED{ label:'REFEREED' }]->(match)"."RETURN referee";

$query = new Neo4j\Cypher\Query($client, $queryString, array('nodeId' => $match->getId(),'name' => $feed['referee_name']));
$result = $query->getResultSet();

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

目前似乎满足您发布的查询的可能模型之一:

(Team)-[:PLAYS]->(Match)

(Match)-[:HAS_REFEREE]->(Referee)

(Match)-[:PLAYED_IN]->(City)

PLAYS关系可以有一个属性来表明球队是否是主队。您还可以在PLAYS关系中拥有一个属性,以指示该团队是否获胜。或者,如果获胜是您所寻找的重要部分,您可以创建一个额外的关系,例如(Team)-[:WON]->(Match)(尽管那时您需要考虑如何建模绘图。在任何一个上都没有WON关系比赛的两支队伍可能表示平局。)

  1. 特定裁判的所有比赛:从裁判开始,遍历比赛到城市。您可以索引裁判的某些独特属性,以便能够快速查找他

  2. 所有比赛裁判的工作和主队赢了:从裁判开始,找到他所有的比赛,过滤WON关系/财产和主队财产

  3. 主队获胜次数最多的所有裁判:与上述相同,从所有裁判开始

  4. 城市最活跃的裁判:从城市开始,查找所有比赛及其裁判

  5. 根据您想要回答的更多问题(尤其是主队属性,赢/输关系或属性等),您可能会稍微改变一下。

    我认为你根本不需要根节点。如果你想找到所有匹配/城市/裁判等,你可以索引所有匹配/城市/裁判等