【问题标题】:Counting distinct nodes in path计算路径中的不同节点
【发布时间】:2020-01-21 23:44:25
【问题描述】:

我有一张包含客户、交易和商家的图表,其连接如下所示:

(客户)->(交易)->(商家)。

我正在尝试有效地返回一个新图表,该图表通过共享不同客户(与两个商家进行过交易的客户)的数量连接各个商家,这可以解释为之间所有路径中不同客户节点的数量第一个商家节点到第二个商家节点。不幸的是,据我所知,在 Neo4j 中这样做非常昂贵。为了让您了解我正在尝试做什么,以下是我尝试使用的一些查询来完成此操作:

MATCH (m1:Merchant)<-[:TRANSACTION_WITH_MERCHANT]-()<-[:CUSTOMER_MADE_TRANSACTION]-(c)-[:CUSTOMER_MADE_TRANSACTION]->()-[:TRANSACTION_WITH_MERCHANT]->(m2:Merchant)
RETURN m1, m2, count(distinct c)
MATCH (m1:Merchant), (m2:Merchant)
WHERE id(m1)<id(m2)
MATCH p=(m1)<-[:TRANSACTION_WITH_MERCHANT]-()<-[:CUSTOMER_MADE_TRANSACTION]-(c)-[:CUSTOMER_MADE_TRANSACTION]->()-[:TRANSACTION_WITH_MERCHANT]->(m2)
RETURN m1, m2, count(distinct c) as n_connections

我意识到这些查询非常讨厌,因为所有的笛卡尔乘积,以及当客户有大量交易时需要探索的大量路径。是否有任何技巧可以避免探索通过同一客户的路径?创建一个直接从客户到他们交易过的商家的图表是不是最好?

感谢任何建议。

【问题讨论】:

    标签: neo4j cypher neo4j-apoc


    【解决方案1】:

    很好地解决了我的问题以执行查询(尽管我确信有更好的解决方案。长话短说,我做了两件事:

    1. 在客户和商家之间直接创建关系,并使用一个属性指示客户与该商家的交易次数。

    2. 删除了交易数量较少的商家,以使交叉产品更易于管理(没有找到解决办法)。

    在客户和商家之间创造优势(目前仅包括交易超过 40 次的商家)。

    match (m:Merchant)<-[t:TRANSACTION_WITH_MERCHANT]-()
    with m, count(t) as nr_trans
    where nr_trans > 40
    match (c: Customer)-[:CUSTOMER_MADE_TRANSACTION]->(t:Transaction)-[:TRANSACTION_WITH_MERCHANT]->(m)
    with c, m, count(t) as nr_transactions_with_merchant
    merge (c)-[:CUSTOMER_TRANSACTED_WITH_MERCHANT {nr_transactions:nr_transactions_with_merchant}]->(m);
    

    掉线和交易量少的商家:

    match (m:Merchant)<-[:TRANSACTION_WITH_MERCHANT]-(t:Transaction)
    with m, count(t) as nr_transactions_with_merchant
    where nr_transactions_with_merchant <= 40
    match (m)<-[e]-()
    delete e
    delete m;
    

    正在运行的新查询!

    MATCH (m1:Merchant), (m2:Merchant)
    WHERE id(m1)<id(m2)
    MATCH p=(m1)<-[:CUSTOMER_TRANSACTED_WITH_MERCHANT]-(c)-[:CUSTOMER_TRANSACTED_WITH_MERCHANT]->(m2)
    RETURN m1, m2, count(c) as n_connections
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多