2015-02-10 3 views
0

У меня есть два файла csv, импортированных в neo4j с именем: uniq_names и all_names. У меня есть один столбец и около 5000 строк в файле uniq_names, и у меня есть три столбца: name, id1 и id2 Это около 300000 строк в файле all_names. Теперь я пытаюсь создать отношения с кодом ниже:Neo4j создает отношения

MATCH (a:uniq_names),(b:all_names) 
    WHERE a.name=b.name AND b.id1<>b.id2 
    CREATE (a)-[:child]->(b); 

, как я выполнить код он думает около 20 минут, но возвращается: «0 возвращаемых строк», как результат, и это down't создавать какие-либо отношения. он отлично работает, когда у меня есть 1000 строк в файле all_names и 50 строк в файле uniq_names У меня есть окна 7 64 бит, jdk 1.7.0_71, neo4j 2.1.6. Есть идеи?

+2

Я отформатированные ваш код для вас, убедитесь, что для дальнейших вопросов, которые вы делаете сами, используя эту страницу для справки ! http://stackoverflow.com/help/formatting – HavelTheGreat

ответ

1

Этот запрос в основном создает перекрестное произведение из вас 5k uniq_names и 300k all_names, поэтому 1.5bn операций - не очень эффективно.

Для оптимизации:

Создать индекс: CREATE INDEX ON :all_names(name). Тогда первый идти по всем uniq_names и найти соответствующие all_names с помощью индексного поиска, проверьте состояние ID и создать отношения:

MATCH (a:uniq_names) 
WITH a 
MATCH (b:all_names {name: a.name}) 
WHERE b.id1<>b.id2 
CREATE (a)-[:child]->(b); 
+0

Спасибо за ваш ответ, я попробовал это, он вернул результат примерно через 3 секунды, но все равно 0 строк вернулся. –

+0

, так как у вас нет 'return', ничего не возвращается. –

+0

Да, но проблема в том, что это тоже не создает никаких отношений. –