Учитывая, что я очень новичок в Neo4j. У меня есть схема, которая выглядит следующим образом:
Здесь Has
узлы отличаются, например Passport, Merchant, Driving License, etc.
, а также эти узлы описывают клиентский узел (ищет будущую область фильтрации клиентов на основе этих узлов) .
SIMILAR
- это самоотношение, означающее, что существует клиент с ID:1
, связанный с другим клиентом с ID:2
с оценка 2800
.
У меня есть следующие вопросы:
- Является ли это хорошей схемой с учетом условия будущей области, о которой я упоминал выше, или получения всех свойств в жизнеспособен ли один клиентский узел? (Различные узлы также могут иметь массив элементов, например:
()-[:HAS]->(Phone)
с {active: "+91-1231241", historic_phone_numbers: ["+91-121213", "+91-1231421"]}
) - Я хочу познакомить клиента с описанием узлов по отношению к другим клиентам. Для этого я попробовал следующий запрос (без числа отношений больше 1):
// With number_of_relation > 1
MATCH (searched:Customer)-[r:SIMILAR]->(matched:Customer)
WHERE r.score > 2700
WITH searched, COLLECT(matched.customer_id) AS MatchedList, count(r) as cnt
WHERE cnt > 1
UNWIND MatchedList AS matchedCustomer
MATCH (person:Customer {customer_id: matchedCustomer})-[:HAS|:LIVES_IN|:IS_EMPLOYED_BY]->(related)
RETURN searched, person, related
Результат, который я получил ниже, обратите внимание, что один клиентский узел не имеет своих описывающих узлов:
// without number_of_relation > 1
// second attempt - for a sample customer_id
MATCH (matched)<-[r:SIMILAR]-(c)-[:HAS|:LIVES_IN|:IS_EMPLOYED_BY]->(b)
WHERE size(keys(b)) > 0
AND c.customer_id = "1b093559-a39b-4f95-889b-a215cac698dc"
AND r.score > 2700
RETURN b AS props, c AS src_cust, r AS relation, matched
Результат, который я получил ниже, у связанных с извещением узлов нет описывающих их узлов:
Если у меня было два описывающих узла с некоторым свойством (у некоторых может быть список), по которым я хотел бы запросить и построить ожидаемый граф, указанный в пункте 2 выше, как я могу это сделать?
Я хочу, чтобы база данных нашла аналогичного клиента с учетом описывающих узлов. Пример: customer {name: "Dave"}
имеет phone {active_number: "+91-12345"}
, аналогично customer {name: "Mike"}
, имеет phone {active_number: "+91-12345"}
. Как можно начать с этим?
Если что-то неясно, пожалуйста, спросите. Я могу объяснить с примерами.