Neo4j的空间,以便通过距离

问题描述:

我目前使用的空间我的查询如下

Neo4j的空间,以便通过距离

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

B是有成绩,我想通过这个分数来排序的实体,但我发现一个在这种情况下,所有得分为0的实体都没有按距离排序。我知道空间自动按距离排序,但是一旦我用另一个字段强制排序,我就会失去这个顺序。

是否有强迫这个命令像二阶场的任何方式:

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

不幸的是在当前的空间插件,没有暗号支撑可言,所以距离函数(或距离结果)不能由ORDER BY访问。如你已经注意到的那样,索引本身的withinDistance函数将返回按距离排序的结果。如果您没有在密码查询中添加额外的ORDER BY,则应该保持距离顺序。但是,当添加额外的ORDER BY时,原始订单将丢失。对于密码开发人员来说,保持ORDER BY中相对相同元素的原始顺序是一个有趣的功能要求。

还有一个单独的计划来开发密码本身内的空间功能,并将按照你想要的方式解决问题。但目前还没有任何有关此开发或发布计划的信息。

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

+0

我发现使用密码,当我们返回'lat'和'lon'时,默认情况下它不会返回距离顺序。如何解决它?如果有使用密码器返回距离的方法?谢谢 – navins 2015-06-03 14:23:34