【问题标题】:Get node properties per type and relation properties per type in Neo4j在 Neo4j 中获取每种类型的节点属性和每种类型的关系属性
【发布时间】:2017-06-21 10:11:27
【问题描述】:

我正在使用 Neo4j 附带的 Movie 示例图,我想获取:

  1. 所有标签
  2. 所有关系名称
  3. 每个标签的所有属性
  4. 每种关系类型的所有属性

我可以使用以下方法获得 1 个所有标签

ResourceIterable<Label> allLabels = GlobalGraphOperations.at(graph).getAllLabels();

所以,我明白了:

Movie
Person

我还可以使用以下方法获得 2 个所有关系类型

Iterable<RelationshipType> allRelationshipTypes = GlobalGraphOperations.at(graph).getAllRelationshipTypes();

这是:

ACTED_IN
DIRECTED
PRODUCED
WROTE
FOLLOWS
REVIEWED

最后,我可以获得所有属性,但不是每个标签或每个关系类型,使用:

ResourceIterable<String> allPropertyKeys = GlobalGraphOperations.at(graph).getAllPropertyKeys();

title
released
tagline
name
born
roles
summary
rating

我想要得到的是:

Movie: [title, released, tagline]
Person: [name, born]
ACTED_IN: [roles]
DIRECTED: []
PRODUCED: []
WROTE: []
FOLLOWS: []
REVIEWED: [summary, rating]

是否可以使用 Java API 甚至执行 Cypher 查询? 请记住,这是在具有数百万个节点的图中完成的。

【问题讨论】:

    标签: neo4j


    【解决方案1】:

    在 Neo4j 中查找所有标签很容易。您已经解决了它,这是 Cypher 中的一个简单查询:

    match (n) return distinct labels(n)
    

    使用 Cypher 和以下查询也很容易找到所有关系类型:

    match (n)-[r]-() return distinct type(r)
    

    但是,对于第 3 和第 4 个问题,它变得更加困难。实际上,获取标签的所有属性或关系类型的所有属性没有成本效益的方法。

    关于获取标签的所有属性。这意味着属性属于标签,就像模式一样(例如,如果您将 DDL 与 RDBMS 进行比较)。由于 Neo4j 基本上是无模式的,因此目前 Neo4j 中没有这种类型的模式支持(当前 Neo4j 的版本是 2.1.6)。这种类型的结构完整性是quite often handled in the application layer for NoSQL databases

    目前可用于 Neo4j 的唯一架构操作描述为 here

    目前包括:

    • 独特 - 例如CREATE CONSTRAINT ON (p:Person) ASSERT p.name IS UNIQUE
    • 索引 - 在标签上创建索引,例如CREATE INDEX ON :Person(name)

    如果您想要更多的结构性执法,以下可能会有所帮助:

    • Structr,Neo4j 之上的一层,它强制执行更严格的架构(查看架构文档here
    • SylvaDB,一个在 Neo4j 之上的易于使用的层,也具有模式支持。看起来很

    除此之外,还有一个工具 NeoProfiler,其中包含许多分析器,其中大多数对您的数据库运行非常简单的 Cypher 查询并提供汇总统计信息。一些分析器实际上会在您的图表中发现数据,然后生成稍后运行的其他分析器。例如,如果在数据中发现名为“Person”的标签,则会将标签分析器添加到运行队列中以检查具有该标签的节点的数量。

    为了找到“属于标签”的所有属性,您必须遍历该类型的所有节点并提取属性名称(这可能非常昂贵)。

    关系类型也是如此。由于它们不属于任何架构,因此查找为某种类型定义的所有属性是一项昂贵的操作(您必须遍历所有关系)。

    【讨论】:

      猜你喜欢
      • 2023-01-26
      • 2012-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-01
      • 2019-09-28
      • 1970-01-01
      相关资源
      最近更新 更多