Neo4j Spatial プラグインを使用しています。
この基本的なクエリを考えてみましょう:
START c = node:carslocation('withinDistance:[2.3725963,48.892067, 34.0]')
RETURN c
34 km 以内のすべての車を返します。
(ラベルを使用して)レースカーのみを取得したい場合はどうすればよいでしょうか。
Spatial がなければ、次のようにします。
MATCH (c:Race)
RETURN c
34km 以内にすべてのレースカーが必要な場合は、次のようになります。
START c = node:carslocation('withinDistance:[2.3725963,48.892067, 34.0]')
MATCH (c:Race)
RETURN c
=> Cannot add labels or properties on a node which is already bound
.
確かにc
、最初の行ですでにバインドされていました。
私はこれをする必要はありません:
START c = node:carslocation('withinDistance:[2.3725963,48.892067, 34.0]')
MATCH (cr:Race)
WHERE cr.id = c.id
RETURN cr
等しいかどうかを確認するために、すべてのノードを開く必要があります... => 特にクエリがより複雑になると、パフォーマンスが低下します (id がインデックス化されている場合でも)。
効率的な解決策は何ですか?
アップデート - - - - - - - - - -
おそらく、ノードのみを比較する方が効率的です。
START c = node:carslocation('withinDistance:[2.3725963,48.892067, 34.0]')
MATCH (cr:Race)
WHERE cr = c
RETURN cr
それは...ですか?