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

时间:2017-02-05 21:02:29

标签: neo4j cypher

尝试获取某种标签类型的所有节点。我有多个图形的根,它们的标签都有相同的后缀。例如,我有3个节点,它们的标签末尾都有treeroot。因此,我可能将companytreerootbuildingtreeroot,nd employeetreeroot作为3个不同节点的3个有效标签。如何获得标签具有该模式的所有节点?

我试过了:

match (n) where '.*treeroot' in labels(n) return n

match (n) where 'treeroot' in labels(n) return n

但两者都返回空集......

2 个答案:

答案 0 :(得分:3)

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

更快的方法是首先使用db.labels()过程找到快速匹配的标签,然后(因为Cypher本身不支持动态标签查询)使用APOC Procedures' 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

答案 1 :(得分:2)

您可以使用ANY function对标签应用reqular表达式:

report.LoadPrepared("sample.fpx"); //load prepared report