2017-06-14 78 views
1

節點列表中傳出的關係,我有一些:book秒。書籍由ISBN確定,並且與相關書籍有:similar關係。這裏是我的暗號查詢得到類似的書籍的ISBN提供的列表:Cypher支架獲得限於量

MATCH (b:Book)-[:SIMILAR]-(c:Book) 
WHERE b.ISBN in $ISBNs 
return b, c 

不過,我想每本書同類書籍數量限制爲5,不限制總的書籍。換句話說,如果我提供一定的ISBN列表,我現在在一本書上得到了7個相似的內容,另外一個上了6個,另一個上了3個。我想限制爲5本書,所以我得到了5,5和3.我該怎麼做?

回答

2

查詢更改爲:

MATCH (b:Book)-[:SIMILAR]-(c:Book) 
WHERE b.ISBN in $ISBNs 
RETURN {book:b, similars: collect(c)[..5]} 

此查詢使用collect()功能,所有的同類書籍中收集到一個列表。它會返回一個投影與包含主簿和包含的限制爲5本書同類書籍集合的similarsbook關鍵。

1

隨着APOC程序可以限制每行的匹配結果的數量,而不是施加限制總行。

看看這個knowledge base article如何與apoc.cypher.run()實現這一目標。

如果您不能使用APOC程序,您可以用布魯諾的答案,這需要收集的有限切片。