0

我正在使用 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 将排名第二。

先感谢您。

图表

4

1 回答 1

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

于 2013-08-05T09:37:43.187 回答