【问题标题】:Neo4j Spatial, relationship between indexes and layersNeo4j Spatial,索引和图层之间的关系
【发布时间】:2014-07-09 09:20:12
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: neo4j neo4j-spatial


    【解决方案1】:

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

    【讨论】:

    • 我可以使用 cypher 命令将节点添加到空间索引吗?这可能吗?
    • 没有。空间索引是一个入口点“存根”,其功能与常规索引不同。事实上,如果您不将节点添加到空间索引中,您可能会更好,因为使用 REST 命令会创建一个复制节点并将其放入 RTree,而不是直接使用您指定的节点.
    • 如果我按照您的建议将节点添加到点层,我该如何更新它?似乎没有 API 调用来更新节点的位置。仅更改节点的 lon/lat 坐标似乎不会更新节点的 bbox 或覆盖层。我不知道这对空间索引行为意味着什么。你呢?
    • 好问题!在 REST API 中,有一个 updateGeometryFromWKT 方法可用于更新节点的几何图形。在 Java API 中,EditableLayer 类(以及它的子类)有一个更新方法来做同样的事情。
    猜你喜欢
    • 2014-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多