|| 模式信息 - APOC 核心文档 - Neo4j 文档

模式信息

要删除、创建或显示索引和约束,可以使用以下过程

限定名称 类型

apoc.schema.assert
apoc.schema.assert(indexes MAP<STRING, LIST<ANY>>, constraints MAP<STRING, LIST<ANY>>, dropExisting BOOLEAN) - 当 dropExisting 为 true(默认为 true)时,删除所有其他现有索引和约束。操作结束时断言给定的索引和唯一约束存在。

过程

apoc.schema.nodes
apoc.schema.nodes(config MAP<STRING, ANY>) - 返回数据库中所有 NODE 标签的索引和约束信息。可以在配置参数中定义要包含或排除的标签集。

过程

apoc.schema.relationships
apoc.schema.relationships(config MAP<STRING, ANY>) - 返回数据库中所有关系类型的索引和约束信息。可以在配置参数中定义要包含或排除的关系类型集。

过程

apoc.schema.node.constraintExists
apoc.schema.node.constraintExists(labelName STRING, propertyName LIST<STRING>) - 根据给定 NODE 标签是否存在具有给定属性名称的约束,返回一个 BOOLEAN 值。

函数

apoc.schema.relationship.constraintExists
apoc.schema.relationship.constraintExists(type STRING, propertyName LIST<STRING>) - 根据给定 RELATIONSHIP 类型是否存在具有给定属性名称的约束,返回一个 BOOLEAN 值。

函数

apoc.schema.node.indexExists
apoc.schema.node.indexExists(labelName STRING, propertyName LIST<STRING>) - 根据给定 NODE 标签是否存在具有给定属性名称的索引,返回一个 BOOLEAN 值。

函数

CALL apoc.schema.assert({indexLabel:[[indexKeys]], ...}, {constraintLabel:[constraintKeys], ...}, dropExisting : true)
YIELD label, key, keys, unique, action

输出结果为

  • 标签

  • 键

  • 键列表

  • 唯一,如果索引或约束是唯一的

  • 操作,可以是以下值:DROPPED(已删除), CREATED(已创建)

要检索数据库中所有节点标签的索引和约束信息,可以使用以下过程

CALL apoc.schema.nodes()

输出结果为

名称 类型 描述

名称

STRING

索引/约束的名称

标签

STRING 或 LIST<STRING>

索引/约束的标签(或标签列表)

属性

LIST<STRING>

受索引/约束影响的属性键

状态

STRING

索引可以有以下值之一:ONLINE(在线), POPULATING(正在填充) 和 FAILED(失败)。约束的值为空字符串

类型

STRING

索引或约束类型。可能的值见下表

失败

STRING

如果索引状态为“FAILED”,则返回失败索引的失败消息(与 SHOW INDEX YIELD failureMessage 的输出匹配)。否则,返回“NO FAILURE”

populationProgress

FLOAT

索引扫描的受影响实体百分比(与 SHOW INDEX YIELD populationPercent 的输出匹配)。约束的值为 0.0

大小

INTEGER

受索引影响的实体数量。约束的值为 0。

valuesSelectivity

FLOAT

现有独立属性值数量除以 size。

例如,对于索引 CREATE INDEX FOR (n:Node) ON (n.foo),独立属性值的数量是 MATCH (n:Node) RETURN count(DISTINCT n.foo)。

约束的值为 0.0

userDescription

STRING

索引/约束的描述

type 结果可以是以下值之一

表 1. type 输出
名称 模式类型

"UNIQUENESS"

唯一节点属性约束

"NODE_PROPERTY_EXISTENCE"

节点属性存在性约束

"NODE_KEY"

节点键约束

"FULLTEXT"

全文索引

"TEXT"

文本索引

"RANGE"

范围索引

"POINT"

点索引

"LOOKUP"

查找索引

要检索数据库中所有关系类型的索引和约束信息,可以使用以下过程

CALL apoc.schema.relationships()

输出结果为

名称 类型 描述

名称

STRING

索引/约束的名称

类型

STRING

索引或约束类型。可能的值见下表

属性

LIST<STRING>

受索引/约束影响的属性键

状态

STRING

索引可以有以下值之一:ONLINE(在线), POPULATING(正在填充) 和 FAILED(失败)。约束的值为空字符串

relationshipType

STRING 或 LIST<STRING>

索引/约束的类型(或类型列表)

type 结果可以是以下值之一

表 2. type 输出
名称 模式类型

"RELATIONSHIP_PROPERTY_EXISTENCE"

关系属性存在性约束

"FULLTEXT"

全文索引

"TEXT"

文本索引

"RANGE"

范围索引

"POINT"

点索引

"LOOKUP"

查找索引

CALL apoc.schema.nodes({labels:['Book']})

注意:节点和关系上的属性存在性约束仅适用于企业版。

要检索节点上是否存在索引,可以使用以下用户函数

RETURN apoc.schema.node.indexExists(labelName, propertyNames)

输出返回节点上是否存在索引

要检索节点上是否存在约束,可以使用以下用户函数

RETURN apoc.schema.node.constraintExists(labelName, propertyNames)

输出返回节点上是否存在约束。

要检索关系上是否存在约束,可以使用以下用户函数

RETURN apoc.schema.relationship.constraintExists(type, propertyNames)

输出返回关系上是否存在约束

示例

列出模式断言

当您运行以下查询时

CALL apoc.schema.assert({Foo:['bar']},null)

您将收到此结果

apoc.schema.assert.index

当您运行以下查询时

CALL apoc.schema.assert(null,{Foo:['bar']})

您将收到此结果

apoc.schema.assert.constraint

当您运行以下查询时

CALL apoc.schema.assert(null,null)

您将收到此结果

apoc.schema.assert.drop

列出节点的索引和约束

给定以下 Cypher 语句

CREATE CONSTRAINT FOR (bar:Bar) REQUIRE bar.foobar IS NOT NULL
CREATE CONSTRAINT FOR (bar:Bar) REQUIRE bar.foo IS UNIQUE
CREATE INDEX FOR (n:Person) ON (n.name)
CREATE INDEX FOR (n:Publication) ON (n.name)
CREATE INDEX FOR (n:Source) ON (n.name)

当您运行以下查询时

CALL apoc.schema.nodes()

您将收到此结果

apoc.schema.nodes

列出关系的约束

给定以下 Cypher 语句

CREATE CONSTRAINT FOR ()-[like:LIKED]-() REQUIRE like.day IS NOT NULL
CREATE CONSTRAINT FOR ()-[starred:STARRED]-() REQUIRE starred.month IS NOT NULL

当您运行以下查询时

CALL apoc.schema.relationships()

您将收到此结果

apoc.schema.relationships

检查标签和属性是否存在索引或约束

给定以前的索引定义,运行此语句

RETURN apoc.schema.node.indexExists("Publication", ["name"])

产生以下输出

apoc.schema.node.indexExists

给定以前的约束定义,运行此语句

RETURN apoc.schema.node.constraintExists("Bar", ["foobar"])

产生以下输出

apoc.schema.node.constraintExists

如果您想检查关系是否存在约束,可以运行此语句

RETURN apoc.schema.relationship.constraintExists('LIKED', ['day'])

您将得到以下结果

apoc.schema.relationship.constraintExists
© . This site is unofficial and not affiliated with Neo4j, Inc.