如何在neo4j中查找包含字符串的所有标签

Wil*_*ill 4 neo4j cypher

尝试获取某种标签类型的所有节点。我有多个图表的根,它们的标签中都有相同的后缀。例如,我有 3 个节点,treeroot它们的标签末尾都有。所以我可能有companytreeroot, buildingtreeroot, ndemployeetreeroot作为 3 个不同节点的 3 个有效标签。我如何获得标签具有该模式的所有节点?

我试过:

match (n) where '.*treeroot' in labels(n) return n
Run Code Online (Sandbox Code Playgroud)

match (n) where 'treeroot' in labels(n) return n
Run Code Online (Sandbox Code Playgroud)

但两者都返回空集...

std*_*b-- 6

您可以使用ANY function将正则表达式应用于标签:

match (n) where ANY(l in labels(n) WHERE l =~ ".*treeroot")
return n
Run Code Online (Sandbox Code Playgroud)


Inv*_*con 5

stdob-- 的答案有效,但它必须检查图中所有节点的所有标签,因此随着图的增长,这会变得越来越昂贵。

更快的方法包括首先使用 db.labels() 过程查找快速匹配的标签,然后(因为 Cypher 本身不支持动态标签查询)使用APOC 过程的 cypher.run()过程使用字符串串联来组装查询查找所有符合您匹配的标签中的所有节点。

这是一个即使在大图上也应该相当快的示例:

CALL db.labels() YIELD label
WITH label
WHERE label ENDS WITH 'treeroot'
CALL apoc.cypher.run('MATCH (n:' + label + ') return n', null) YIELD value
RETURN value.n as node
Run Code Online (Sandbox Code Playgroud)