簡體   English   中英

Neo4J 密碼:推薦使用 NOT 子句或任何的產品

[英]Neo4J cypher:recommend products using NOT clause or any

我能夠使用以下代碼在材料和購買它的最終用戶之間創建關系,但現在我想找到最終用戶未使用共同材料購買的材料,並在圖中顯示為推薦引擎。 假設A買了1,2,3個產品,B買了1,3個產品,c有5個,這里我想向B客戶推薦產品2,c沒有產品,因為c和其余的沒有共同的產品推薦

 MATCH(f:material),(t:enduser) WHERE NOT (f)-[:BOUGHT]->(t) return f,t

我嘗試使用 Not 子句,但它顯示了所有產品

這是我將如何解決這個問題。

假設下圖(基於您給出的場景):

在此處輸入圖片說明

為用戶 b 推薦材料:

MATCH (user:EndUser{name:'b'})-[:BOUGHT]->(:Material)<-[:BOUGHT]-(someOtherUser:EndUser)-[:BOUGHT]->(m:Material)
WHERE
    NOT((user)-[:BOUGHT]->(m))
    AND user <> someOtherUser
RETURN m

哪個會得到結果:

在此處輸入圖片說明

同樣,如果我們嘗試使用 USER-C,我們會得到:

MATCH (user:EndUser{name:'c'})-[:BOUGHT]->(:Material)<-[:BOUGHT]-(someOtherUser:EndUser)-[:BOUGHT]->(m:Material)
WHERE
    NOT((user)-[:BOUGHT]->(m))
    AND user <> someOtherUser
RETURN m

我們得到了預期的空結果:

在此處輸入圖片說明

關於密碼的一些解釋:

(user:EndUser{name:'b'})-[:BOUGHT]->(:Material)<-[:BOUGHT]-(someOtherUser:EndUser)-[:BOUGHT]->(m:Material)部分第一次匹配我們正在嘗試向用戶推薦:Material並轉到他/她購買的材料,然后對於每種材料,我們試圖找到另一個:EndUser ,他也已經:BOUGHT了該材料。 然后對於他們中的每一個,我們也通過他們的:BOUGHT關系,並將我們找到的這些材料稱為m

然后NOT((user)-[:BOUGHT]->(m))試圖確保用戶(我們試圖推薦給)沒有直接購買該項目,並且user <> someOtherUser部分檢查用戶和另一個:User我們在處理過程中發現的:User節點不是相同的節點(例如循環)。

如何在代碼中使用它:

您通常會使用參數作為所需的值(在本例中為name )。

python中的簡單示例:

. . .

@staticmethod
def _create_recommendation_transaction(tx, name):
    result = tx.run(
    """
    MATCH (user:EndUser{name: $name })-[:BOUGHT]->(:Material)<-[:BOUGHT]-(someOtherUser:EndUser)-[:BOUGHT]->(m:Material)
    WHERE
       NOT((user)-[:BOUGHT]->(m))
       AND user <> someOtherUser
    RETURN m
    """, name=name)
 
. . .

暫無
暫無

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

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