Cypher 如何仅对特定类型的节点进行最大跳数计算?

How can Cypher Impose a Maximum Number of Hops Only Counting a Specific Type of Node?

我知道在 Neo4J 中,Cypher 可用于根据两个节点之间的最大跳数过滤结果,如下所示:

MATCH (a:Word)-[relationships*..3]-(b:Word)
RETURN a, relationships, b
LIMIT 5

这将 return 都是 Word 类型的节点(a 和 b),并且彼此总跳数为 4(通过所有节点类型和所有关系类型)。

我想知道是否可以让 Cypher 只计算特定类型的节点,当它在上面的例子中计算到最大 3 跳时。

例如,在这个节点链中:

(a:单词) ---> (b:定义) ---> (c:单词) ---> (d:定义) ---> (e:定义) ---> (f:Word) ---> (g:定义) ---> (h:Word)

节点 ah 之间共有 7 跳。但是,它们之间只有 3 个跳字

Cypher 是否可以通过这种方式设置最大跳数?

您可以使用 filter to count label 个节点。例如:

MATCH path = (a:Word)-[relationships*..10]-(b:Word)
WHERE SIZE( FILTER(n IN NODES(path) WHERE 'Word' IN LABELS(n)) ) > 3
RETURN a, relationships, b
LIMIT 5