我不知道如何使用Cypher返回节点标签。
有人知道如何执行此操作的语法吗?
有人知道如何执行此操作的语法吗?
获取所有不同的节点标签:
MATCH (n) RETURN distinct labels(n)
获取每个标签的节点计数:
MATCH (n) RETURN distinct labels(n), count(*)
有一个函数 labels(node) 可以返回节点的所有标签。
Neo4j 3.0引入了过程db.labels()
,该过程返回数据库中所有可用的标签。使用:
call db.labels();
call
只返回扁平化列表,而MATCH
将它们作为["RawFile", "RawPhoto"]
返回,前者需要4ms,后者需要15ms。注:我有分层标签。 - joshfindit如果你想要所有单独的标签(而非组合),你可以随时在答案中进行展开:
MATCH (n)
WITH DISTINCT labels(n) AS labels
UNWIND labels AS label
RETURN DISTINCT label
ORDER BY label
START n=node(*) RETURN labels(n)
START n=node(*) RETURN DISTINCT(labels(n))
与MATCH (n) RETURN distinct labels(n)
的结果相同,但是需要花费大约10倍的时间(在我的数据库上)。 - joshfindit如果您正在使用Java API,您可以通过以下方式快速获取数据库中所有Label
的迭代器:
GraphDatabaseService db = (new GraphDatabaseFactory()).newEmbeddedDatabase(pathToDatabase);
ResourceIterable<Label> labs = GlobalGraphOperations.at(db).getAllLabels();
labels(node)
; 如果您只想获取neo4j中所有节点的标签,则可以使用此函数:call db.labels;
,绝不要使用此查询:MATCH n RETURN DISTINCT LABELS(n)
。它会进行全表扫描,非常非常慢。匹配(n) WHERE n.name="abc" 返回 labels(n)
它返回节点“abc”的所有标签
MATCH n RETURN DISTINCT LABELS(n)
这样打字可以少输入8个字符 :) - F LekschasMATCH
,因为START
是用于旧版索引的。 - ADTCCypher
标签之外,这个问题也有neo4j
标签。获取所有不同节点标签的最短且执行速度最快的查询是CALL db.labels
-- 至少在neo4j3.0
及以后版本中如此,详情请参见neo4j
手册中的 CALL 页面。 - unserializable