Запрос занимает так много времени neo4j для объединения отношений - PullRequest
2 голосов
/ 26 сентября 2019
LOAD CSV FROM 'file:///relationships.tsv' as row
FIELDTERMINATOR '\t'
WITH row
MATCH (a:actor {id: row[2]}), (b:movie {id: row[0]}) MERGE (a)-[r:ACTED_IN]->(b)

Выглядит так: файл:

tt0015637   8   nm0166876   actor   \N  ["Bull Harding"]
tt2450056   2   nm0000616   actor   \N  ["Dr. Mc Millan"]
tt1053424   1   nm0000179   actor   \N  ["Remy"]
tt0062535   1   nm0176061   actor   \N  ["Ric"]
tt0016908   3   nm0384944   actor   \N  ["Capt. Blackwell"]
tt0020459   4   nm0176971   actor   \N  ["Pete"]
tt1300155   1   nm1497548   actor   \N  ["Moon Blake"]

строка [0] - это идентификатор фильма.row [2] - это идентификатор актера

Кроме того, я также хочу, чтобы row [3] был только актером.Иногда есть что-то вроде

tt0033839   5   nm0377613   director    \N  \N

Я хочу, чтобы строка [3] была только актером, которого я пытался

LOAD CSV FROM 'file:///relationships.tsv' as row
FIELDTERMINATOR '\t'
WITH row
MATCH (a:actor {id: row[2]}), (b:movie {id: row[0]}) MERGE (a)-[r:ACTED_IN]->(b)
WHERE row[3] == 'actor'

Но это дает мне Neo.ClientError.Statement.SyntaxError: Invalid input 'H ': ожидаемое' i / I '(строка 5, столбец 2 (смещение: 161)) "WHERE row [3] ==' actor '

Я добавил всех актеров, которые имеют одинаковые свойства name и idс фильмом.

Почему это не работает?

1 Ответ

2 голосов
/ 26 сентября 2019

Убедитесь, что у вас есть индексы, созданные на :actor(id) и :movie(id).

И поместите оператор WHERE после оператора WITH, поэтому сначала вы отфильтруете строки, а затем выполните операции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...