Преобразование имен узлов с буквенно-цифровыми именами в числовые в neo4j - PullRequest
0 голосов
/ 11 июля 2019

У меня есть имена узлов в neo4j с такими именами, как «abc124», «abcd124», «xyz678», «zxyz678» и т. Д.

В вышеприведенных именах узлов abc124 и abcd124 имеют одинаковые номера (номер ID / аккн.) -124, поэтому мне нужно объединить эти узлы, которые имеют одинаковые идентификаторы / номер аккн. Логика, которую я пытаюсь, состоит в том, чтобы разделить буквенно-цифровые имена узлов на числа, а затем использовать процедуру apoc для объединения узлов

Я не могу найти функцию, которая удаляет символьную часть из имен узлов

Я пытался использовать Integer, но не работает

RETURN toInteger('42AB')

Итак, мои имена входных узлов: "abc124", "abcd124", "xyz678", "zxyz678" Таким образом, я хотел бы получить имена выходных узлов 124 124 678 678 ....

1 Ответ

0 голосов
/ 11 июля 2019

Функция APOC apoc.text.regexGroups может быть полезна.

Например:

RETURN TOINTEGER(apoc.text.regexGroups('abc123', '\\d+')[0][0])

возвращает:

123

[ОБНОВЛЕНИЕ]

Для объединения Foo узлов, чьи свойства name оканчиваются одними и теми же цифрами, вы также можете использовать apoc.refactor.mergeNodes , чтобы помочь с объединением узлов (вы можететакже хотите указать некоторые из задокументированных параметров конфигурации, в зависимости от ваших потребностей).

MATCH (f:Foo)
WITH f, TOINTEGER(apoc.text.regexGroups(f.name, '\\d+')[0][0]) AS acct
WITH acct, COLLECT(f) AS foos
WHERE SIZE(foos) > 1
CALL apoc.refactor.mergeNodes(foos) YIELD node
RETURN acct
...