Периодическая итерация APOC завершается с ошибкой NULL Java-указателя - PullRequest
0 голосов
/ 30 апреля 2019

Я пытаюсь использовать периодическую итерацию APOC для внесения изменений в модель данных графа. Я использую команду LOAD CSV для разбора текстовых данных и загрузки статей в neo4j 3.4.4.

USING PERIODIC COMMIT 5000 LOAD CSV WITH HEADERS 
FROM 'file:///article.txt' as r FIELDTERMINATOR '\t' 
MATCH (a:Article {PMID: toInt(r.PMID)}) 
WITH a, toLower(r.ArticleTitle) as text 
WITH a, reduce(t=text, delim in [",",".","!","?",'"',":",";","'","(",")","[","]","{","}"] | replace(t,delim," ")) as text 
WITH a, reduce(t=text, delim in ["/", "\\"] | replace(t, delim, " ")) as text with a, filter(w in split(text, " ") where length(w) > 2) as words SET a.words = words;

Я могу создать узлы Word с помощью следующей команды, которая довольно чувствительна к объему загружаемых данных. Текущая база данных насчитывает 83 000 статей, запрос выполняется за несколько минут.

MATCH (a:Article) where exists(a.words) 
WITH a  
FOREACH (word in a.words| 
  MERGE (w:Word {Name: word}) 
  MERGE (a) -[r:contains]-> (w) 
  ON CREATE SET r.f = 1 
  ON MATCH SET r.f = r.f + 1
)

Поэтому я попытался использовать процедуру apoc.periodic.iterate для небольших пакетов данных. Поскольку процедура APOC не допускает кавычек в запросе, я сначала создаю массив отфильтрованных слов, которые, следовательно, используются для генерации узлов и отношений.

CALL apoc.periodic.iterate('MATCH (a:Article) WHERE EXISTS(a.words) RETURN a as art','WITH {art} as a FOREACH (word in a.words | MERGE (w:Word {Name: word}) MERGE (a) -[r:contains]-> (w) ON CREATE SET r.f = 1 ON MATCH SET r.f = r.f + 1)', {batchSize:1000, parallel:true})

Приведенный выше запрос не выполняется в некоторых пакетах со следующим сообщением:

batches total   timeTaken   committedOperations failedOperations    failedBatches   retries errorMessages   batch   operations  wasTerminated
83  1233    2   573 82  82  0   
{

}
{
  "total": 83,
  "committed": 1,
  "failed": 82,
  "errors": {
    "java.lang.NullPointerException": 82
  }
}
{
  "total": 1233,
  "committed": 573,
  "failed": 82,
  "errors": {

  }
}
false

Данные являются общедоступными, но они слишком велики, чтобы их можно было разделить здесь, и я не могу понять, какая запись не удалась, кроме того, все записи работали с чистым запросом CYPHER.

...