0

私は neo4jphp ( https://github.com/jadell/neo4jphp ) を使用しています。これが私のデータノードと関係です。トラバーサルを使用して任意の 1 つのファイルの「関連するダウンロード」を見つけようとしていますが、コードに関するヘルプが必要です。これは私の現在のコードです(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";
        }
    }

たとえば、開始ノードが file_id = 1 の場合、最も関連性の高いダウンロードは file_id = 3 になります。これは、file_id 1 をダウンロードするすべての人が file_id = 3 もダウンロードするためです。File_id 2 と 4 は 2 番目にランク付けされます。

前もって感謝します。

チャート

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ください。

Cypher を neo4jphp で使用する方法については、https://github.com/jadell/neo4jphp/wiki/Cypher-and-gremlin-queriesを参照してください。

于 2013-08-05T09:37:43.187 に答える