2

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

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

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

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

4

1 回答 1

3

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

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

2) 你不能在没有索引的情况下进行 Cypher 查询。但事实证明,索引实际上只是 Neo4j Spatial 的入口点,您实际上不必将节点添加到索引中。您应该将节点添加到索引或将节点添加到图层。不要两者都做。如果您选择将节点添加到层而不是索引,则必须采取进一步的步骤才能使 Cypher 查询起作用。(有关详细信息,请参阅我对其他问题的回答。)

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 属性的节点,将它们添加到您的索引或图层中,一切正常。

于 2014-07-11T20:19:24.470 回答