У меня есть схема, которая выглядит следующим образом:
A customer
связана с другим customer
с отношением SIMILAR
, имеющим similarity score
.
Пример: (c1:Customer)-->(c2:Customer)
Узел Email
подключен к каждому customer
со связью MAIL_AT
со следующими свойствами узла:
{
"active_email_address": "a@mail.com",
"cibil_email_addresses": [
"b@mail.com", "c@mail.com"
]
}
Пример: (e1:Email)<-[:MAIL_AT]-(c1:Customer)-[:SIMILAR]->(c2:Customer)-[:MAIL_AT]->(e2:Email)
Узел
Risk
с некоторыми свойствами, связанными с риском (ниже) и связан с
customer
с отношением
HAS_RISK
:
{
"f0_score": 870.0,
"pta_score": 430.0
}
Узел
Fraud
с некоторыми свойствами, связанными с мошенничеством (ниже) и связан с
customer
с отношением
IS_FRAUD
:
{
"has_commited_fraud": true
}
Мои цели :
- Чтобы найти клиентов с общими адресами электронной почты (независимо от активного и дополнительного)?
Мое предварительное решение:
MATCH (email:Email)
WITH email.cibil_email_addresses + email.active_email_address AS emailAddress, email
UNWIND emailAddress AS eaddr
WITH DISTINCT eaddr AS deaddr, email
UNWIND deaddr AS eaddress
MATCH (customer:Customer)-[]->(someEmail:Email)
WHERE eaddress IN someEmail.cibil_email_addresses + someEmail.active_email_address
WITH eaddress, COLLECT(customer.customer_id) AS customers
RETURN eaddress, customers
Проблема: Требуется вечность, чтобы выполнить это. Я понимаю, что работа со списками займет некоторое время, но я могу изменить схему (если предлагается). Должен ли я разбить адрес электронной почты на отдельные узлы? Если да, то как мне разбить cibil_email_addresses
на разные узлы, поскольку они могут различаться - Должен ли я создать два узла с разными cibil email addresses
и соединить их обоих с клиентом с отношением HAS_CIBIL_EMAIL
? (Это действительный дизайн схемы) . Также возможно, что active_email_address
клиента присутствует в cibil_email_address
другого клиента. Я пытаюсь найти синтетическую атаку c. PS: Если есть некоторые APOC
, которые могут помочь достичь этого и ниже, предложите пример.
В производстве для данного клиента с email addresses
, risk values
, similarity score
, а также с учетом других клиентов может быть или не быть отмечено с fraud_status
, я хочу проверить, является ли этот новый человек попадет в мошенническое кольцо или нет. PS: Если мне нужно использовать любой gds
, чтобы решить эту проблему, пожалуйста, предложите с примерами.
Если бы я должен был сделать то же самое упражнение с другим узлом, таким как Address
, который может быть частично совпадающим и будет иметь тот же список исторических адресов в списке, каким должен быть мой идеальный подход?
Я знаю, я помечаю кого-то в своем вопросе, но этот человек, похоже, активен только в отношении Cypher в StackOverflow. @ cybersam любая помощь? Спасибо.