Не удается создать ограничение

#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 /