2013-05-02 12 views
17

サイファークエリにページを設定することは可能ですか?例えば、製品のリストですが、私は多くの結果を得ることができるので、すべての結果を表示/取得/キャッシュしたくありません。cypherを使用してクエリ結果をページングする方法は?

私はSQLのオフセット/制限に似た何かを探しています。

サイファースキップ+リミット+オーダーは良いオプションですか? http://docs.neo4j.org/chunked/stable/query-skip.html

答えて

16

SKIPおよびLIMITが実際に行く方法です。 ORDER BYを使用すると、必然的に、クエリに関連するすべてのノードがサイファーにスキャンされます。 WHERE句を使用する場合と同じです。パフォーマンスはそれほど悪くはありません。続くよう

+4

ワンnitpick:using句は、必ずしもへのすべてのノードを強制しませんWHEREスキャンする。 Cypherは、指定された条件に一致する最初の 'LIMIT x'ノードが見つかった後もスキャンを停止します(結局のところ、何か他のものを読み取る必要があるのでしょうか?)。あなたは完全なスキャンを引き起こす 'ORDER BY'について正しいです。 – ean5533

+0

そうです、それは理にかなっています。ありがとう! – tstorms

+1

私はneo4jについてはわかりませんが、ほとんどのデータベース(多くのエンジニアがこれを知らないという奇妙なことです)では、ページ単位のクエリを実行するときに 'ORDER BY'節を使用することが必須です:' ORDER BY 'の場合、データベース実装は、必要と思われる順序(例:パフォーマンスなど)で結果を自由に返すことができます。これは、ページ2のクエリ結果がページ1の結果と何ら連続性を持たないことを意味する。 @ ean5533これはneoでどのように動作するか知っていますか? –

4

ITSは、通常のSQLのように、構文は次のとおりです

match (user:USER_PROFILE)-[USAGE]->uUsage 
where HAS(uUsage.impressionsPerHour) AND (uUsage.impressionsPerHour > 100) 
ORDER BY user.hashID 
SKIP 10 
LIMIT 10; 

最後のバージョン(2.xの)にこの構文のスーツ

関連する問題