找到每个节点的排序模式

问题描述:

我的数据是用这种方式建模的:找到每个节点的排序模式

我有节点的足球运动员,目标和比赛。玩家与[:玩过的]关系相匹配,并与[:得分]关系相关。目标与[:scoredIn]关系相匹配。每场比赛都有一个(长)日期属性。

我试图找到在最近5场比赛中进球最多的球员(在match.date属性上使用DESC排序)。

什么是最有效的方法?我可以查看每个球员的比赛排序DESC,保持比赛ID,然后找到(球员) - [:得分] - >(球门) - [:得分] - >(米)模式到这些相关的比赛,但这是非常慢。

好像我错过了什么,我怎么能找到这些模式与相对排序?

感谢

+2

向我们展示你的“慢”查询。 –

+0

这就像下面的答案... – user3008826

它可以帮助个人资料或说明你的查询和生成的计划粘贴到你的描述(与所有元素展开)。

刺探它,听起来好像我们正在寻找最适合遍历的查询。一名球员可能已经打入很多很多球,并且不得不扩大每个球门,并且对一个游戏中得分的目标进行哈希加入,听起来可能非常昂贵。

如果我们得到一名球员的最近5场比赛,然后获得在比赛中得分的进球并过滤基于球员的进球,这可能会更有效率。

喜欢的东西:

MATCH (p:Player)-[:played]->(m) 
WITH p, m 
ORDER BY m.date DESC 
WITH p, COLLECT(m)[..5] as matches 
UNWIND matches as match 
MATCH (match)<-[:scoredin]-(g) 
WHERE (g)<-[:scored]-(p) 
RETURN p, COUNT(g) as goalsInLast5 
ORDER BY goalsInLast5 DESC 
LIMIT 10 // or whichever top n you want 

使用大图,这仍可能是一个昂贵的查询。

作为一项小改进,您可能需要考虑按照每个球员的比赛分组目标,而不是每个目标的单个目标节点。

喜欢的东西:

(播放器) - [:拿下] - >(目标:目标{目标:4}) - [:scoredin] - >(匹配)

+0

这实际上是我的'慢'查询 - 获得每个球员的最后5场比赛,让每个球员的目标和排序。这在我的50,000个比赛图表上需要10-12秒,所以我恐怕我错过了一些东西,并有更好的方法来实现这个目标。 – user3008826

+0

你可以简介查询并将其添加到你的描述中(首先展开所有元素)? – InverseFalcon