У меня есть следующие два типа узлов:Получить узлы, которые не имеют определенное отношение (Cypher/Neo4j)
c:City {name: 'blah'}
s:Course {title: 'whatever', city: 'New York'}
Цель создания этот:
(s)-[:offered_in]->(c)
Я пытаюсь получить все курсы, которые НЕ привязаны к городам и не создают отношения к городу (город создается, если его не существует). Тем не менее, проблема в том, что мой набор данных составляет около 5 миллионов узлов, и любой запрос, который я делаю, отключается (если я не делаю с шагом 10k).
... у кого-нибудь есть совет?
EDIT:
Вот запрос на работу я бегу сейчас (что должно быть сделано в 10k куски (из миллионов), так как это занимает несколько минут, так как это создает город, если Безразлично. «т существует):
match (j:Job)
where not has(j.merged) and has(j.city)
WITH j
LIMIT 10000
MERGE (c:City {name: j.city})
WITH j, c
MERGE (j)-[:in]->(c)
SET j.merged = 1
return count(j)
(сейчас не знает, хороший способ, чтобы отфильтровать те уже совпавшие, поэтому пытается сделать это, помечая его с обычаем„слит“атрибут, который у меня уже есть индекс на)
Вы можете поделиться тем, что вы в настоящее время ищете? – JohnMark13
Я не думаю, что на это можно ответить без дополнительного контекста (и, сопоставив ваш вопрос с вашим обновлением, я предполагаю, что задание == и в == Предлагаемый_индекс). Вы работаете с существующими данными или это массовый импорт? Не могли бы вы немного рассказать о настройке системы? Вместо «слияния» вы можете использовать WHERE NOT (j) - [: in] ->(). – JohnMark13
Вы видите таймаут через интерфейс браузера? –