У меня есть график с клиентами, транзакциями и продавцами со связями, которые выглядят следующим образом:
(Клиент) -> (Транзакция) -> (Продавец).
Я пытаюсь эффективно вернуть новый график, который связывает различных продавцов по количеству общих отдельных клиентов (клиентов, которые заключили сделку с обоими продавцами), который можно интерпретировать как количество отдельных клиентских узлов в все пути между первым торговым узлом и вторым торговым узлом. К сожалению, из того, что я могу сказать, это слишком дорого делать в 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
Я понимаю, что эти запросы довольно неприятны из-за все декартовы произведения и огромное количество путей, которые необходимо изучить, когда у клиентов много транзакций. Есть ли уловки, чтобы избежать изучения путей, проходящих через одного и того же клиента? Будет ли лучше создавать график, идущий напрямую от покупателя к продавцу, с которым они заключили сделку?
Я ценю любые предложения.