我在一个表中有一个由景点组成的CSV,而其他表则由一个公司的办公地点组成。这两个表也都包含纬度和经度信息。
由名胜古迹
组成的CSV文件结构 POI_Name经度纬度城市
POI_1 77.573957 12.970125班加罗尔
POI_2 77.579886 13.009582班加罗尔
POI_3 77.546688 13.023931钦奈
同样,我们有一个CSV文件,其中包含公司的办公地点
办公室经度纬度城市
Office_1 78.324445 12.970125班加罗尔
Office_2 77.254555 13.234444金奈
Office_3 76.098438 14.135567班加罗尔
两个表都包含数千个记录。现在,我想在Neo4J中创建一个查询,该查询将按降序排列前5个最近的景点到办公室位置(在查询中作为参数传递)在运行时。
答案 0 :(得分:0)
由于每次两个节点之间的距离都是相同的,因此我建议您解析所有地点与所有办公室之间的距离,并创建一个以km为单位的距离值或节点之间的距离(placei,officej)的“距离”关系,那么您只需查询另一个节点的前n个最近的节点(然后您可以运行以下查询:MATCH(p:Place)-[d:DISTANCE]->(o:Office {myoffice})RETURN p,o,d ORDER按d.km ASC限制5)。您将节省时间和计算成本。
无论如何,您都可以使用下一个查询:
MATCH (p:Place), (o:Office {id:myoffice}) RETURN distance(point({latitude: p.latitude, longitude: p.longitude}), point({latitude: o.latitude, longitude: o.longitude})) / 1000.0 as km, p, o ORDER BY km ASC LIMIT 5