2013-08-05 58 views
0

我正在使用neo4jphp(https://github.com/jadell/neo4jphp)。这是我的数据节点和关系。我正在尝试使用遍历来查找任何一个文件的“相关下载”,并希望获得有关代码的帮助。这是我当前的代码(它只返回谁下载的file_id = 1)neo4j遍历相关下载

$traversal = new Everyman\Neo4j\Traversal($this->client); 
    $traversal->addRelationship('download', Relationship::DirectionIn) 
      ->setPruneEvaluator(Traversal::PruneNone) 
      ->setReturnFilter(Traversal::ReturnAllButStart) // ReturnAllButStart OR ReturnAll 
      ->setMaxDepth(0); 
    $pager = new Everyman\Neo4j\Pager($traversal, $startNode, Traversal::ReturnTypeNode); 
    $pager->setPageSize(10) 
      ->setLeaseTime(120); 

    while ($results = $pager->getNextResults()) { 
     foreach ($results as $node) { 
      echo $node->getProperty('fi') . $node->getProperty('name')."\n"; 
     } 
    } 

例如,如果的StartNode是的file_id = 1,最相关的下载将FILE_ID = 3,因为大家谁下载的file_id 1也可以下载的file_id = 3.File_id 2和4将排名第二。

预先感谢您。

chart

回答

1

使用暗号,你会节省大量的代码:

START file=node(1) // or startNode as named parameter 
MATCH p=file<-[:download]-()-[:download]->otherFile 
RETURN otherFile, count(*) order by count(*) desc 

如果你想限制例如最佳5场比赛,修正limit 5

查看https://github.com/jadell/neo4jphp/wiki/Cypher-and-gremlin-queries了解如何使用Cypher和neo4jphp。

+1

这是正确的。我还要补充一点,如果你要使用遍历方法,你会想将maxDepth设置为大于0的值。但是Cypher绝对是这里的一种方式。 –