Types 在neo4j图中,每种类型返回一个关系的Cypher查询

Types 在neo4j图中,每种类型返回一个关系的Cypher查询,types,neo4j,cypher,relationship,Types,Neo4j,Cypher,Relationship,是否有一个Cypher查询来返回图形中每种关系类型的单个关系 例如,我有一个图形,其中包含5个类型为TYPE\ux、10个类型为TYPE\uy、1个类型为TYPE\uz的关系。查询将返回3个关系: ()-[r1:TYPE_X]->() ()-[r2:TYPE_Y]->() ()-[r3:TYPE_Z]->() 无论哪种类型的\u X关系返回为r1。理想情况下,查询不必扫描每一个关系,只需为每种类型返回一个任意关系即可 此查询对于在交互式浏览器中查询关系类型及其属性非常有用

是否有一个Cypher查询来返回图形中每种关系类型的单个关系

例如,我有一个图形,其中包含5个类型为
TYPE\ux
、10个类型为
TYPE\uy
、1个类型为
TYPE\uz
的关系。查询将返回3个关系:

()-[r1:TYPE_X]->()
()-[r2:TYPE_Y]->()
()-[r3:TYPE_Z]->()
无论哪种
类型的\u X
关系返回为
r1
。理想情况下,查询不必扫描每一个关系,只需为每种类型返回一个任意关系即可

此查询对于在交互式浏览器中查询关系类型及其属性非常有用


基于@christophe willemsen的更新。 我使用了以下查询:

MATCH ()-[r]->()
RETURN type(r) AS rel_type, collect(r)[0] AS example
要为每种类型生成一个关系,请执行以下操作:


实际上这很简单,您只需在关系类型上进行聚合:

MATCH (a)-[r]->(b)
RETURN type(r), collect(r)[0] AS oneRel
-

每种类型选择一个随机关系 在Neo4j 3.0.1中,我一直在使用以下命令为每种类型选择一个随机关系

MATCH ()-[r]->()
WITH type(r) AS rel_type, collect(r) AS rels
WITH rel_type, rels, toInt(rand() * size(rels)) AS idx
RETURN rel_type, rels[idx] AS example

基于,并在关系集合上添加了随机索引查找。

谢谢。我用这个查询生成的可视化结果更新了我的问题。作为参考,此查询首先执行了一个命中每个节点的
AllNodesScan
,然后执行了一个命中每个关系的
Expand(All)
。使用2.3.2 cost planner,查询耗时9秒,有5万个节点和300万个关系。
MATCH ()-[r]->()
WITH type(r) AS rel_type, collect(r) AS rels
WITH rel_type, rels, toInt(rand() * size(rels)) AS idx
RETURN rel_type, rels[idx] AS example