Neo4j按距离划分的空间顺序

时间:2014-10-19 14:07:40

标签: sorting neo4j spatial

我目前正在使用Spatial进行查询,如下所示:

START b=node:LocationIndex('withinDistance:[70.67,12.998,6.0]')
RETURN b
ORDER BY b.score

B是一个有分数并且我想按此分数排序的实体,但我发现了一个案例,其中所有得分为0的实体都没有按距离排序。我知道Spatial会按距离自动排序,但是一旦我用另一个字段强制下订单,我就会失去这个订单。

是否有任何方法可以将此订单强制为二阶字段,如:

START b=node:LocationIndex('withinDistance:[70.67,12.998,6.0]')
RETURN b
ORDER BY b.score, ?distance?

1 个答案:

答案 0 :(得分:2)

不幸的是,在当前的空间插件中,根本没有密码支持,因此ORDER BY无法访问距离函数(或距离结果)。

正如您已经注意到的,索引中的withinDistance函数将返回按距离排序的结果。如果在cypher查询中未添加额外的ORDER BY,则应保持距离顺序。但是,添加额外的ORDER BY时,原始订单将丢失。对于密码开发人员来说,维护ORDER BY中相对相同的元素的原始顺序将是一个有趣的特征请求。

还有一个单独的计划在cypher本身内开发空间功能,这将以你想要的方式解决问题。但是目前还没有关于开发或发布计划的任何信息。

可以在更短的时间范围内帮助您并且独立于neo4j开发计划本身的另一个选项是通过扩展向空间索引查询添加订单。现在您将索引查询指定为' inDistance:[70.67,12.998,6.0]',但您可以编辑Spatial Plugin代码以支持将额外参数传递给此查询,它们可能是一个订单按参数。然后你就可以完全控制订单了。