指纹识别 (Fingerprinting)

以下函数计算节点、关系或整个图的哈希值。它会考虑所有属性、节点标签和关系类型。

用于哈希的算法可能会在不同 APOC 版本之间发生变化。因此,仅能比较同一图中,或使用相同 APOC 版本的不同图中的两个实体/图的哈希结果。

图的哈希值首先计算每个节点的哈希值。生成的哈希值列表会被排序,并为每个节点添加所有关系及其终点节点的哈希值。内部 ID 不包含在哈希值中。

也可以提供一个 propertyKeys 列表,以便在所有节点上忽略这些属性。这在存储诸如 created=timestamp() 等应被忽略的属性时非常有用。

函数名称 描述

apoc.hashing.fingerprint(object ANY, excludedPropertyKeys LIST<STRING>)

计算 NODERELATIONSHIP 的 MD5 校验和(相同的实体共享相同的校验和)。不适用于加密用例。

apoc.hashing.fingerprinting(object ANY, config MAP<STRING, ANY>)

计算 NODERELATIONSHIP 的 MD5 校验和(相同的实体共享相同的校验和)。与 apoc.hashing.fingerprint() 不同,此函数支持多种配置参数。不适用于加密用例。

apoc.hashing.fingerprintGraph(propertyExcludes LIST<STRING>)

计算整个图的 MD5 校验和。此函数使用内存中数据结构。不适用于加密用例。

配置参数

表 1. apoc.hashing.fingerprinting 配置参数
名称 (name) type 默认 description(描述)

digestAlgorithm

STRING

"MD5"

用于计算指纹的算法。支持的值包括:MD5SHA-1SHA-256

strategy

STRING

"LAZY"

定义节点/关系的过滤行为。支持的值包括:

  • LAZY - 不包含属性。

  • EAGER - 包含所有未过滤的属性。

nodeAllowMap

MAP<STRING, LIST<STRING>>

{}

节点标签名称映射到该标签允许的属性列表。

nodeDisallowMap

MAP<STRING, LIST<STRING>>

[]

节点标签名称映射到该标签应忽略的属性列表。

relAllowMap

MAP<STRING, LIST<STRING>>

{}

关系类型名称映射到该类型允许的属性列表。

relDisallowMap

MAP<STRING, LIST<STRING>>

[]

关系类型名称映射到该类型应忽略的属性列表。

mapAllowList

LIST<STRING>

[]

当被哈希的对象为 Map 时,允许的键列表。

mapDisallowList

LIST<STRING>

[]

当被哈希的对象为 Map 时,应忽略的键列表。

allNodesAllowList

LIST<STRING>

[]

全局允许的节点属性列表。

allNodesDisallowList

LIST<STRING>

[]

全局忽略的节点属性列表。

allRelsAllowList

LIST<STRING>

[]

全局允许的关系属性列表。

allRelsDisallowList

LIST<STRING>

[]

全局忽略的关系属性列表。

无法为同一实体类型同时定义“允许”和“禁止”列表。因此,在设置节点、关系和 Map 的指纹识别参数时,列表必须统一为“允许”或“禁止”模式。

指纹识别策略

如果配置中定义的属性在节点和/或关系中不存在,则可以定义指纹识别过程的执行方式:

  • EAGER:如果未提供允许/禁止列表,则在哈希中包含所有属性。

  • LAZY:如果未提供允许/禁止列表,则在哈希中排除所有属性。