我正在使用Neo4j和PHP。 在我的项目中,我有餐厅节点。每个节点都有纬度,经度和分类属性。
我需要将符合用户给定分类的餐厅节点返回到与用户所在位置(即第一家最近的餐厅)的距离排序的结果。
最简单的解决方案是什么?
我曾经使用过Mongo DB和Elasticsearch,使用特殊的索引很容易实现。但我无法在Neo4j中找到一种直截了当的方式。
答案 0 :(得分:2)
有几种解决方案:
使用neo4j空间插件:https://github.com/neo4j-contrib/spatial
使用Cypher中的haversin
计算距离:http://neo4j.com/docs/stable/query-functions-mathematical.html#functions-spherical-distance-using-the-haversin-function
在3.0Mx中,应该有点和距离的基本Cypher函数:https://github.com/neo4j/neo4j/pull/5397/files(我没有测试过它)
答案 1 :(得分:2)
除了前面提到的Neo4j-Spatial,在Neo4j 3.0中还有一个内置的MATCH (a:Location), (b:Restaurant)
WHERE ... filtering ...
RETURN b
ORDER BY distance(point(a),point(b))
功能。
见GraphGist:
http://jexp.github.io/graphgist/idx?dropbox-14493611%2Fcypher_spatial.adoc
因此,如果您以某种方式找到并匹配您的餐馆,您可以按距离订购它们:
from dir.my_module import my_class
reload(dir.my_module)
答案 2 :(得分:1)
Neo4j Spatial包含距离查询(包括许多其他内容),也关注订购。