HITS

在 Aura Graph Analytics 中,此功能仅通过 Python 客户端提供。它目前无法作为 Cypher 过程或函数使用。

术语表

有向

有向特征。该算法在有向图上定义良好。

有向

有向特征。该算法忽略图的方向。

有向

有向特征。该算法不能在有向图上运行。

无向

无向特征。该算法在无向图上定义良好。

无向

无向特征。该算法忽略图的无向性。

异构节点

异构节点完全支持。该算法有能力区分不同类型的节点。

异构节点

异构节点允许。该算法平等对待所有选定的节点,无论其标签如何。

异构关系

异构关系完全支持。该算法有能力区分不同类型的关系。

异构关系

异构关系允许。该算法平等对待所有选定的关系,无论其类型如何。

加权关系

加权特征。该算法支持将关系属性用作权重,通过 relationshipWeightProperty 配置参数指定。

加权关系

加权特征。该算法将每个关系视为同等重要,忽略任何关系权重值。

节点属性

节点属性特征。该算法使用节点属性。

简介

超链接诱导的主题搜索 (HITS) 是一种链接分析算法,它根据两个分值对节点进行评分:hub(枢纽)分值和 authority(权威)分值。authority 分值用于评估节点在网络中的重要性。hub 分值用于评估该节点与其它节点关系的价值。GDS 的实现基于 Jon M. Kleinberg 的论文《Authoritative Sources in a Hyperlinked Environment》。

HITS 算法需要每种关系类型的反向索引。

语法

本节涵盖了在每种执行模式下运行 HITS 算法所使用的语法。我们在此描述的是命名图 (named graph) 变体的语法。要了解更多关于通用语法变体的信息,请参阅 语法概览

各模式下的 HITS 语法
在命名图上以流模式 (stream mode) 运行 HITS。
CALL gds.hits.stream(
  graphName: String,
  configuration: Map
)
YIELD
  nodeId: Integer,
  values: Map
表 1. 参数
名称 类型 默认 可选 描述

graphName

字符串

不适用

存储在目录中的图的名称。

配置

Map

{}

算法特定配置和/或图过滤配置。

表 2. 配置
名称 类型 默认 可选 描述

nodeLabels

字符串列表

['*']

使用给定的节点标签过滤命名图。具有任何给定标签的节点都将被包含。

relationshipTypes

字符串列表

['*']

使用给定的关系类型过滤命名图。具有任何给定类型的关系都将被包含。

concurrency

整数

4 [1]

用于运行算法的并发线程数。

jobId

字符串

内部生成

可以提供一个 ID 以更轻松地跟踪算法的进度。

logProgress

布尔值

true

如果禁用,进度百分比将不会被记录。

hitsIterations

整数

20

运行 HITS 的迭代次数。Pregel 迭代次数将等于 hitsIterations * 4

authProperty

字符串

"auth"

在使用 STREAMMUTATEWRITE 模式时,用于 auth 属性的名称。

hubProperty

字符串

"hub"

在使用 STREAMMUTATEWRITE 模式时,用于 hub 属性的名称。

partitioning

字符串

"AUTO"

用于在线程间分配工作的分区方案。可用选项为 AUTORANGEDEGREE

1. 在 GDS 会话中,默认值为可用处理器的数量。

表 3. 结果
名称 类型 描述

nodeId

整数

节点 ID。

值 (values)

Map

包含 authhub 键的映射。

在命名图上以统计模式 (stats mode) 运行 HITS。
CALL gds.hits.stats(
  graphName: String,
  configuration: Map
)
YIELD
  ranIterations: Integer,
  didConverge: Boolean,
  preProcessingMillis: Integer,
  computeMillis: Integer,
  configuration: Map
表 4. 参数
名称 类型 默认 可选 描述

graphName

字符串

不适用

存储在目录中的图的名称。

配置

Map

{}

算法特定配置和/或图过滤配置。

表 5. 配置
名称 类型 默认 可选 描述

nodeLabels

字符串列表

['*']

使用给定的节点标签过滤命名图。具有任何给定标签的节点都将被包含。

relationshipTypes

字符串列表

['*']

使用给定的关系类型过滤命名图。具有任何给定类型的关系都将被包含。

concurrency

整数

4 [2]

用于运行算法的并发线程数。

jobId

字符串

内部生成

可以提供一个 ID 以更轻松地跟踪算法的进度。

logProgress

布尔值

true

如果禁用,进度百分比将不会被记录。

hitsIterations

整数

20

运行 HITS 的迭代次数。Pregel 迭代次数将等于 hitsIterations * 4

authProperty

字符串

"auth"

在使用 STREAMMUTATEWRITE 模式时,用于 auth 属性的名称。

hubProperty

字符串

"hub"

在使用 STREAMMUTATEWRITE 模式时,用于 hub 属性的名称。

partitioning

字符串

"AUTO"

用于在线程间分配工作的分区方案。可用选项为 AUTORANGEDEGREE

2. 在 GDS 会话中,默认值为可用处理器的数量。

表 6. 结果
名称 类型 描述

ranIterations

整数

运行的迭代次数。

didConverge

布尔值

指示算法是否收敛。

preProcessingMillis

整数

预处理图的毫秒数。

computeMillis

整数

运行算法的毫秒数。

配置

Map

运行算法所使用的配置。

在命名图上以变异模式 (mutate mode) 运行 HITS。
CALL gds.hits.mutate(
  graphName: String,
  configuration: Map
)
YIELD
  ranIterations: Integer,
  didConverge: Boolean,
  preProcessingMillis: Integer,
  computeMillis: Integer,
  mutateMillis: Integer,
  nodePropertiesWritten: Integer,
  configuration: Map
表 7. 参数
名称 类型 默认 可选 描述

graphName

字符串

不适用

存储在目录中的图的名称。

配置

Map

{}

算法特定配置和/或图过滤配置。

表 8. 配置
名称 类型 默认 可选 描述

nodeLabels

字符串列表

['*']

使用给定的节点标签过滤命名图。

relationshipTypes

字符串列表

['*']

使用给定的关系类型过滤命名图。

concurrency

整数

4

用于运行算法的并发线程数。

logProgress

布尔值

true

如果禁用,进度百分比将不会被记录。

mutateProperty

字符串

""

用于 PregelSchema 中所有公共属性的前缀。

jobId

字符串

内部生成

可以提供一个 ID 以更轻松地跟踪算法的进度。

hitsIterations

整数

20

运行 HITS 的迭代次数。Pregel 迭代次数将等于 hitsIterations * 4

authProperty

字符串

"auth"

在使用 STREAMMUTATEWRITE 模式时,用于 auth 属性的名称。

hubProperty

字符串

"hub"

在使用 STREAMMUTATEWRITE 模式时,用于 hub 属性的名称。

partitioning

字符串

"AUTO"

用于在线程间分配工作的分区方案。可用选项为 AUTORANGEDEGREE

表 9. 结果
名称 类型 描述

ranIterations

整数

运行的迭代次数。

didConverge

布尔值

指示算法是否收敛。

preProcessingMillis

整数

预处理图的毫秒数。

computeMillis

整数

运行算法的毫秒数。

mutateMillis

整数

向投影图添加属性的毫秒数。

nodePropertiesWritten

整数

写入 Neo4j 的属性数量。

配置

Map

用于运行算法的配置。

在命名图上以写入模式 (write mode) 运行 HITS。
CALL gds.hits.write(
  graphName: String,
  configuration: Map
)
YIELD
  ranIterations: Integer,
  didConverge: Boolean,
  preProcessingMillis: Integer,
  computeMillis: Integer,
  writeMillis: Integer,
  nodePropertiesWritten: Integer,
  configuration: Map
表 10. 参数
名称 类型 默认 可选 描述

graphName

字符串

不适用

存储在目录中的图的名称。

配置

Map

{}

算法特定配置和/或图过滤配置。

表 11. 配置
名称 类型 默认 可选 描述

nodeLabels

字符串列表

['*']

使用给定的节点标签过滤命名图。具有任何给定标签的节点都将被包含。

relationshipTypes

字符串列表

['*']

使用给定的关系类型过滤命名图。具有任何给定类型的关系都将被包含。

concurrency

整数

4 [3]

用于运行算法的并发线程数。

jobId

字符串

内部生成

可以提供一个 ID 以更轻松地跟踪算法的进度。

logProgress

布尔值

true

如果禁用,进度百分比将不会被记录。

writeConcurrency

整数

'concurrency' 的值

用于将结果写入 Neo4j 的并发线程数。

writeProperty

字符串

""

用于 PregelSchema 中所有公共属性的前缀。

hitsIterations

整数

20

运行 HITS 的迭代次数。Pregel 迭代次数将等于 hitsIterations * 4

authProperty

字符串

"auth"

在使用 STREAMMUTATEWRITE 模式时,用于 auth 属性的名称。

hubProperty

字符串

"hub"

在使用 STREAMMUTATEWRITE 模式时,用于 hub 属性的名称。

partitioning

字符串

"AUTO"

用于在线程间分配工作的分区方案。可用选项为 AUTORANGEDEGREE

3. 在 GDS 会话中,默认值为可用处理器的数量。

表 12. 结果
名称 类型 描述

ranIterations

整数

运行的迭代次数。

didConverge

布尔值

指示算法是否收敛。

preProcessingMillis

整数

预处理图的毫秒数。

computeMillis

整数

运行算法的毫秒数。

writeMillis

整数

将结果数据写回的毫秒数。

nodePropertiesWritten

整数

写入 Neo4j 的属性数量。

配置

Map

用于运行算法的配置。

示例

以下所有示例应在空数据库中运行。

这些示例将 Cypher 投影作为规范。原生投影将在未来版本中弃用。

在本节中,我们将展示在具体图上运行 HITS 算法的示例。目的是说明结果的样子,并提供如何在实际环境中使用该算法的指南。我们将在一个由少量节点按特定模式连接而成的小型社交网络图上进行演示。示例图如下所示

Visualization of the example graph
以下 Cypher 语句将在 Neo4j 数据库中创建示例图:
CREATE
  (a:Website {name: 'A'}),
  (b:Website {name: 'B'}),
  (c:Website {name: 'C'}),
  (d:Website {name: 'D'}),
  (e:Website {name: 'E'}),
  (f:Website {name: 'F'}),
  (g:Website {name: 'G'}),
  (h:Website {name: 'H'}),
  (i:Website {name: 'I'}),

  (a)-[:LINK]->(b),
  (a)-[:LINK]->(c),
  (a)-[:LINK]->(d),
  (b)-[:LINK]->(c),
  (b)-[:LINK]->(d),
  (c)-[:LINK]->(d),

  (e)-[:LINK]->(b),
  (e)-[:LINK]->(d),
  (e)-[:LINK]->(f),
  (e)-[:LINK]->(h),

  (f)-[:LINK]->(g),
  (f)-[:LINK]->(i),
  (f)-[:LINK]->(h),
  (g)-[:LINK]->(h),
  (g)-[:LINK]->(i),
  (h)-[:LINK]->(i);

在该示例中,我们将使用 HITS 算法计算权威分值和枢纽分值。

以下语句将投影图并将其存储在图目录中。
MATCH (source:Website)-[r:LINK]->(target:Website)
RETURN gds.graph.project(
  'myGraph',
  source,
  target,
  {},
  { inverseIndexedRelationshipTypes: ['*'] }
)

在以下示例中,我们将演示如何在上述图上使用 HITS 算法。

流式 (Stream)

stream 执行模式下,算法会返回每个节点的权威分值和枢纽分值。这使我们可以直接查看结果,或在 Cypher 中进行后处理,而不会产生任何副作用。

有关 stream 模式的更多详细信息,请参阅 流式读取

以下内容将运行算法并流式传输结果
CALL gds.hits.stream('myGraph', {hitsIterations: 20})
YIELD nodeId, values
RETURN gds.util.asNode(nodeId).name AS Name, values.auth AS auth, values.hub as hub
ORDER BY Name ASC
表 13. 结果
名称 auth hub

"A"

0.0

0.5147630377521207

"B"

0.42644630743935796

0.3573686670593437

"C"

0.3218729455718005

0.23857061715828276

"D"

0.6463862608483191

0.0

"E"

0.0

0.640681017095129

"F"

0.23646490227616518

0.2763222153580397

"G"

0.10200264424057169

0.23867470447760597

"H"

0.426571816146601

0.0812340105698113

"I"

0.22009646020698218

0.0