有什么方法可以过滤掉 Neo4J APOC 请求中最频繁出现的术语吗?

Any way to filter out the most frequent terms in Neo4J APOC request?

我有以下要求:

CALL apoc.index.relationships('TO','context:34b4a5b0-0dfa-11e9-98ed-7761a512a9c0') 
 YIELD rel, start, end WITH DISTINCT rel, start, end 
 RETURN DISTINCT start.uid AS source_id, 
 start.name AS source_name, 
 end.uid AS target_id, 
 end.name AS target_name, 
 rel.uid AS edge_id, 
 rel.context AS context_id, 
 rel.statement AS statement_id, 
  rel.weight AS weight

其中returns一个table的结果如

问题: 有没有办法过滤掉前 150 个最连接的节点(source_name/source_idtarget_name/edge_id 节点)?

我认为它不适用于 frequency,因为每个 table 行都是唯一的(因为 edge_id 不同),但 Neo4J/Cypher 中可能有一个函数允许我计算最频繁的(source_name/source_idtarget_name/edge_id)节点?

谢谢!

您可以随时使用 size( (node)-[:REL]->() ) 获得学位。

如果你先计算前 n 度,你可以通过比较过滤掉那些

WHERE min < size( (node)-[:REL]->() ) < max

此查询可能会执行您想要的操作:

CALL apoc.index.relationships('TO','context:34b4a5b0-0dfa-11e9-98ed-7761a512a9c0') 
YIELD rel, start, end
WITH start, end, COLLECT(rel) AS rs
ORDER BY SIZE(rs) DESC LIMIT 50
RETURN
  start.uid AS source_id, 
  start.name AS source_name, 
  end.uid AS target_id, 
  end.name AS target_name,
  [r IN rs | {edge_id: r.uid, context_id: r.context, statement_id: r.statement, weight: r.weight}] AS rels

查询使用aggregating functionCOLLECT收集每对start/end个节点的所有关系,保留关系最多的50个节点对的数据,returns 每对一行数据(关系数据在 rels 列表中)。