#neo4j
#neo4j
Вопрос:
Мои данные выглядят как:
user_id from_page_id to_page_id event_type timestamp
0 USER355A155307089387404434774906 pages/mine/mine pages/mine/mine pv 1598936406406
1 USER355A155307089387404434774906 pages/mine/mine /pages/score/score pv 1598936408261
2 USER355A155307089387404434774906 pages/mine/mine pages/mine/mine click 1598936408311
3 USER355A155307089387404434774906 pages/mine/mine /pages/score/score click 1598936410824
4 USER355A155307089387404434774906 pages/score/score /pages/scoreDetai pv 1598936410878
...
Я пытаюсь создать график для соединения пользователя с его путем к посещенным страницам :
LOAD CSV WITH HEADERS FROM "file:///data.csv" AS line
CREATE (u:User), (p1:Page {from: line.from_page_id}), (p2:Page {to: line.to_page_id}),
(u)-[:VIEWS]->(p1), (u)-[:VIEWS]->(p2), (p1)-[:NEXT]->(p2);
CREATE CONSTRAINT ON (u:User) ASSERT u.id IS UNIQUE;
Он создает график, но выдает мне ошибку:
Neo.DatabaseError.Schema.ConstraintCreationFailed: Unable to create Constraint( name='constraint_47e7f15d', type='UNIQUENESS', schema=(:User {id}) ):
Both Node(324) and Node(327) have the label `User` and property `id` = 'USER0138119929164105321108358370'
Что я здесь делаю не так?
Комментарии:
1. Я думаю, ваша ошибка может заключаться в том, что вы не прочитали сообщение об ошибке? Вы пытаетесь добавить ограничение, чтобы идентификатор пользователя был уникальным, когда в ваших данных это явно не так. Либо не выполняйте ограничение (вам это нужно?), либо получите какие-то другие входные данные?
2. Вы получаете график, который хотели? Тогда просто отбросьте ограничение и двигайтесь дальше. Если график неверен, вы можете уточнить, чего вы пытаетесь достичь.
3. извините, я совершенно новичок в neo4j, спасибо, не могли бы вы любезно сказать мне, что мне следует сделать, чтобы получить точного (отдельного) пользователя и путь к его странице (просмотр отношений)?
4. Итак, вы пытаетесь создать график для одного конкретного пользователя?
5. И на самом деле вы в настоящее время знаете больше о neo4j, чем я, я просто констатировал болезненно очевидное. 🙂
Ответ №1:
Что помогает, так это :
Создайте ОГРАНИЧЕНИЕ в отдельном процессе.. это не обязательно должно быть частью вашего cypher. Обратите внимание, что вы можете создать ОГРАНИЧЕНИЕ только в том случае, если нет дубликатов.
Как только ОГРАНИЧЕНИЕ будет установлено, Neo4j проверит и предотвратит вставку любых дубликатов.
Когда у вас есть данные, которые у вас есть, вы должны использовать
MERGE (u:User {user_id:line.user_id})
Дополнительная информация здесь:https://neo4j.com/docs/cypher-manual/current/clauses/merge /