1

我正在使用 Neo4j Spatial 插件。

让我们假设这个基本查询:

START c = node:carslocation('withinDistance:[2.3725963,48.892067, 34.0]') 
RETURN c

它返回 34 公里内的所有汽车。

如果我只想检索赛车(使用标签)怎么办。

如果没有空间,我会这样做:

MATCH (c:Race)
RETURN c 

现在,如果我想要34 公里内的所有赛车,我会:

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

是吗?

4

1 回答 1

3

怎么样:

START c = node:carslocation('withinDistance:[2.3725963,48.892067, 34.0]') 
WHERE 'Race' in labels(c)
RETURN c

您基本上查找给定区域内的所有节点,然后如果它们的标签包含Race.

于 2014-08-22T10:29:52.433 回答