neo4j遍历相关下载

时间:2013-08-05 03:27:07

标签: neo4j neo4jphp

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

    $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 个答案:

答案 0 :(得分:1)

使用Cypher时,您需要保存大量代码:

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一起使用。