我在neo4j(http://www.neo4j.org/)中有一个图表,节点代表人。其中一些节点保存了物理位置(在各种属性中:经度,纬度,location_name,location_id),但它们也可以为零。
我想构建一个cypher查询,该查询按照与原始节点列出的物理位置的距离对结果节点进行排序。例如,我想从具有经度-122.419,纬度37.7793,location_name“旧金山,加利福尼亚”和location_id 114952118516947的节点ID 42开始查询,并通过物理位置(最短距离)检索距离节点42最近的10个人。我已经找到了使用经度和纬度来计算两点之间(近似)距离的资源,所以这不是问题。
有没有办法为每个被访问节点计算类似的变量,然后按该变量对结果进行排序?
我意识到这可能是计算上昂贵的,所以这是我想要开始工作的另一种选择:
当我尝试将ORDER BY(http://docs.neo4j.org/chunked/milestone/query-order.html)与从WITH运算符(http://docs.neo4j.org/chunked/stable/query-with.html)计算的变量一起使用时,我收到此错误:
SyntaxException: Unknown identifier `flag`.
以下是完整查询:
start n = node(42) match (n)<-[:friends]->(f) WITH f, (f.fb_location_id = 114952118516947) AS flag RETURN DISTINCT f ORDER BY flag LIMIT 10
如果无法做到这一点,最好的方法是什么?
谢谢!
答案 0 :(得分:4)
尝试在距离内使用该怎么办? e.g。
START n=node:people('withinDistance:[53.489271,-2.246704, 20.0]')
<conditions here>
RETURN n
此处提供的纬度/经度是示例中节点42的位置,20.0是以km为单位的最大距离。 如果您使用的是Neo4j 1.9+,请查看http://architects.dzone.com/articles/neo4jcypher-finding-football,其中介绍了您可以使用Neo4j Spatial做些什么。
注意:withinDistance的结果默认按距离asc
排序