有什么方法可以过滤掉 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_id
和 target_name/edge_id
节点)?
我认为它不适用于 frequency
,因为每个 table 行都是唯一的(因为 edge_id
不同),但 Neo4J/Cypher 中可能有一个函数允许我计算最频繁的(source_name/source_id
和 target_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
列表中)。
我有以下要求:
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_id
和 target_name/edge_id
节点)?
我认为它不适用于 frequency
,因为每个 table 行都是唯一的(因为 edge_id
不同),但 Neo4J/Cypher 中可能有一个函数允许我计算最频繁的(source_name/source_id
和 target_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
列表中)。