【发布时间】:2019-03-22 14:19:45
【问题描述】:
我对 Neo4J 和 Cypher 非常陌生,我必须处理高度相关的数据集。图模型是这样的
在我的数据中,我有多个 C、A、Le 实例,而只有少数几个 Lo、R、F 实例。
我正在寻找一种方法来获得以下信息:对于每一对独特的 Lo-F,获取所有 C 并计算每对这样的独特 C 的数量。
换句话说,我希望所有C 组共享相同的LO 和F,我需要我的结果告诉我:
- 有多少独特的
C - 普通 LO
- 普通F
我卑微的开始是MATCH 这样的模式(箭头的方向与这个问题几乎无关):
MATCH (c:C)--(:A)--(le:LE)--(:R)--(f:F),
(le)--(lo:LO)
RETURN f, lo, c LIMIT 5
返回所有匹配的模式。然后我开始尝试使用collect 和count。例如,
MATCH (c:C)--(:A)--(le:LE)--(:R)--(f:F),
(le)--(lo:LO)
RETURN f, lo, collect(c), COUNT(*) as _counts
ORDER BY _counts LIMIT 5
这似乎给了我一张带有独特 f-lo 对的表格以及 C 的列表以及计数。但是,collect(c) 列重复了C,因此_counts 不正确。然后我尝试介绍DISTINCT:
MATCH (c:C)--(:A)--(le:LE)--(:R)--(f:F),
(le)--(lo:LO)
RETURN f, lo, collect(DISTINCT c), COUNT(*) as _counts
ORDER BY _counts LIMIT 5
但我有同样的结果...
我已经在 Google 上进行了广泛的搜索,但由于我对 SQL 也很陌生,我发现大多数教程和示例很难在它们的 SQL 类比中遵循。
另外,将其作为聚类算法会更好吗?我已经安装了algo 插件,但我一直在努力理解如何为.stream 方法准备匹配以完成此操作。
【问题讨论】: