我正在使用 Neo4j 查找半径为 50 公里且在特定日期可用的用户。
这个问题与其他问题类似,但索引自 Neo4J 2.0 以来发生了变化,因此该解决方案不起作用。
我使用 Neo4j 2.2.1、Neo4j-spatial 0.14 和 py2neo / py2neo-spatial 与图形进行交互。
要将用户几何图形添加到我使用的图表中:
def create_geo_node(graph, node, layer_name, name, latitude, longitude):
spatial = Spatial(graph)
layer = spatial.create_layer(layer_name)
node_id = node._id
shape = parse_lat_long(latitude, longitude)
spatial.create_geometry(geometry_name=name, wkt_string=shape.wkt, layer_name="Users", node_id=node_id)
..它根据需要创建空间节点。
然后我想通过执行以下操作来查询图表:
START user=node:Users('withinDistance:[4.8,45.8,100]')
MATCH period=(start_date:Date)-[:NEXT_DAY*]->(end_date:Date)
WHERE start_date.date="2014-03-03" AND end_date.date="2014-03-04"
UNWIND nodes(period) as nodes_in_period
OPTIONAL MATCH (nodes_in_period)<-[a:AVAILABLE]-(user:User)
RETURN user.uuid, count(a)/count(nodes(period))
但查询返回:
Index `Users` does not exist
似乎 py2neo spatial.create_layer(..) 创建了图层而不是索引(但应该吗?..因为索引现在是 Neo4j 1.* 的“遗产”)
使用 py2neo 空间 find_within_distance 有效,但由于它使用 REST api,我无法发出考虑其他参数的混合请求
据我了解,自 Neo4j 2.0 起,START 已被弃用,但我无法在 Neo4j 2.2 中为 withinDistance 找到正确的 Cypher 查询
先感谢您,
本杰明