簡體   English   中英

返回與另一個節點關系最密切的節點

[英]Return nodes with most relationship to another node

首先,我是neo4j和cypher的新手,所以如果這很簡單,對不起:)

我面臨一個我無法解決的問題,但是我將盡力解釋我必須做的事情。

我有一個包含一些客戶的圖,這些客戶已經下了一些包含產品的訂單。 這意味着圖形的設置如下:

(c:Customer)-[r:PURCHASED]->(o:Order)-[f:ORDERS]->(p:Product)

這是我必須處理的圖形的表示(這只是一個示例,而不是實際的圖形): 在此處輸入圖片說明

我必須找到客戶C及其訂購的所有產品(p1-p6),這不是問題。 我需要做的是找到已訂購大多數相同產品的客戶,然后輸出該客戶和產品。 這意味着與僅訂購2個相同商品的c3相比,顧客c2已訂購了3個與顧客c相同的產品。 那我要c2。

這是我到目前為止的

MATCH (c:Customer {customerID: "C"})-[r:PURCHASED]->(o:Order)-
[f:ORDERS]->(p:Product),
(p)<-[f1:ORDERS]-(o1:Order)<-[r1:PURCHASED]-(c1:Customer)
WITH c1 AS c1, count(p) AS count, p AS p
WHERE count > 4
RETURN c1,p

這並沒有真正給我我想要的東西。 自從我輸入count> 4以來,我得到了1個客戶和1個產品。 該產品與客戶具有3 f1:ORDERS關系。 我想要一個(或多個)與ID為“ C”的客戶購買了4種以上相同產品的客戶。

顯然我做錯了,我似乎無法弄清楚如何獲得正確的結果。 我希望有人能夠幫助我

這應該為您工作:

MATCH
  (c:Customer { customerID: "C" })-[r:PURCHASED]->(o:Order)-[f:ORDERS]->(p:Product),
  (p)<-[f1:ORDERS]-(o1:Order)<-[r1:PURCHASED]-(c1:Customer)
WITH c1, COLLECT(DISTINCT p) AS ps
RETURN c1, ps
ORDER BY LENGTH(ps) DESC 
LIMIT 1;

該查詢針對每個c1客戶匯總該客戶購買的與c購買產品相同的獨特產品。 然后,按共有多少個產品(按降序排列)對這些客戶進行排序; 並返回頂級客戶以及他的共享產品集合。

這是一個控制台 ,顯示帶有示例數據的結果。

您可以使用ORDER BYLIMIT來做您想做的事情:

MATCH (c:Customer {customerID: "C"})-[r:PURCHASED]->(o:Order)-
[f:ORDERS]->(p:Product),
(p)<-[f1:ORDERS]-(o1:Order)<-[r1:PURCHASED]-(c1:Customer)
WITH c1, count(p) AS count, p
ORDER BY count
RETURN c1, p LIMIT 1

這將按count屬性對結果進行排序,並且僅返回第一個,因此與大多數產品相關的那個。

如果這不是您所需要的(我不太清楚您的問題),請在評論中說出來,我將更新我的答案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM