Neo4j Spatial,索引和图层之间的关系

时间:2014-07-09 09:20:13

标签: neo4j neo4j-spatial

我对neo4j空间中的图层和索引之间的关系感到困惑。特别是我有以下三个问题:(我可以根据要求提供代码示例,但是它的代码很多而且与问题没有密切关系。)

1)如果使用空间索引提供程序添加索引,则完全可以使用neo4j空间而无需显式创建任何层。但是,这是否意味着它隐式创建了一个层,我可以直接通过Java API访问该层?

2)假设我创建了一个图层。是否可以在此层上执行Cypher查询而无需显式创建索引?在层和空间索引中添加相同的节点似乎并不正确,但据我所知,如果明确创建索引,则只能使用带空间的Cypher。

3)我一直使用SpatialIndexProvider.SIMPLE_WKT_CONFIG作为我的索引提供者,但这意味着我必须创建一个属性wkt并给出输入POINT(XY),我希望能够告诉我的编码器使用,比方说,两个属性经度和纬度。这可能吗?对于图层来说似乎是可能的,但与索引的关系不大。

1 个答案:

答案 0 :(得分:3)

1)使用空间索引提供程序添加索引确实会创建一个图层。您可以通过从空数据库开始并添加空间索引,然后查看已创建的节点来查看此信息。如果使用Java或REST直接创建层,那么这组相关节点正是您将要发现的。

如果列出创建的索引,您会发现创建了两个索引。一个人有你提供的名字,一个以你的名字开头,然后是一个非常长的字符串,我认为这个字符串是为了让它独一无二(可能还有其他一些我不知道的目的)。

2)您无法在没有索引的情况下进行Cypher查询。但事实证明,索引实际上只是Neo4j Spatial的入口点,而且您实际上不必将节点添加到索引中。您应该将节点添加到索引或将节点添加到图层。别做这两件事。如果您选择将节点添加到图层而不是索引,那么在Cypher查询工作之前您必须采取进一步的步骤。 (有关详细信息,请参阅我对this other question的回答。)

3)完全可以创建使用SimplePointEncoder的索引和图层。执行此操作的REST调用是

POST http://localhost:7474/db/data/index/node {"name":"test", "config":{"provider":"spatial", "geometry_type":"point", "lat":"lat", "lon":"lon"}}

然后使用lat和lon属性创建节点,将它们添加到索引或图层,一切正常。