Neo4j 2.2:具有其他参数的Cypher空间请求返回索引不存在
我正在使用Neo4j来查找半径在50公里范围内、在特定日期可用的用户 这个问题与Neo4J 2.0类似,但索引自Neo4J 2.0以来发生了变化,因此解决方案不起作用 我使用Neo4j 2.2.1、Neo4j spatial 0.14和py2neo/py2neo spatial与图形交互 要将用户几何图形添加到我使用的图形中,请执行以下操作:Neo4j 2.2:具有其他参数的Cypher空间请求返回索引不存在,neo4j,cypher,py2neo,neo4j-spatial,Neo4j,Cypher,Py2neo,Neo4j Spatial,我正在使用Neo4j来查找半径在50公里范围内、在特定日期可用的用户 这个问题与Neo4J 2.0类似,但索引自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): sp
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))
- 似乎py2neo spatial.create_层(..)创建了层,但没有创建索引(但是否应该?。因为索引现在是Neo4j 1的“遗产”。)
- 使用py2neo spatial find_in_distance可以工作,但由于它使用REST api,因此我无法提出考虑其他参数的混合请求
- 据我所知,自Neo4j 2.0以来,START已被弃用,但我无法在Neo4j 2.2中找到withinDistance的正确密码查询
Benjamin
创建一个“空间”索引,该索引不同于Neo的索引。它实际上创建了一个图形,为您建模一些边界框,以便您可以对数据执行空间查询。您不需要直接引用此索引。把它想象成一个GIS图层
您可以检查图形并找出编写自己的密码查询所需的节点属性
但是您也可以使用py2neo空间APIfind_in_distance
希望这能有所帮助。我认为这些链接是有用的:
*
*
但问题不是你没有得到任何结果,而是索引上有一个错误。。。这就是我困惑的原因
您是否可以使用一些REST查询(创建图层和空间节点)直接测试neo4j spatial,看看会发生什么
否则,对于您关于密码启动条件的问题,您只需将此条件放入匹配条件中,如下所示:
MATCH
user=node:Users('withinDistance:[4.8,45.8,100]'),
period=(start_date:Date {date:'2014-03-03'})-[:NEXT_DAY*]->(end_date: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))
匹配
user=node:Users('withinDistance:[4.8,45.8100]'),
期间=(开始日期:日期{日期:'2014-03-03'})-[:下一天*]->(结束日期:日期{日期:'2014-03-04'})
将节点(周期)作为节点\u在\u周期中展开
可选匹配(节点在周期内)Thx@noiseboiler。我已经使用了py2neo空间扩展和find_within_distance,但是由于它使用restapi,所以我不能进行混合请求。我更新了我的问题,以反映我应该澄清的是,create\u layer
永远不会在您的案例中创建名为“Users”的Neo索引。这些东西是完全不同的。对这里的索引的误解。可能在空间方面语言使用不当。。。。但是create_layer
并没有创建一个典型的Neo索引-它创建了一个图形,然后可以使用该图形在相关应用程序节点上高效地执行空间类型查询。你不必担心这个索引。
MATCH
user=node:Users('withinDistance:[4.8,45.8,100]'),
period=(start_date:Date {date:'2014-03-03'})-[:NEXT_DAY*]->(end_date: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))