Удалите связь из индекса с помощью APOC Neo4J 3.x

когда я удаляю связь в Neo4J 3.x, я хочу, чтобы она также была удалена из автоматического индекса, созданного с помощью APOC.

Однако я не вижу никакой процедуры для удаления связи в APOC. Я вижу только removeRelationshipByName, но затем мне нужно указать Имя отношения, а что, если бы у меня были отношения по типу? Если связь не удалена, я получаю сообщение об ошибке, когда пытаюсь выполнить поиск с использованием этого индекса по свойству отношения. Он находит связь в индексе, но ее не существует.

Чтобы лучше понять, я создал индекс существующих отношений, используя

MATCH ()-[r]->() CALL apoc.index.addRelationship(r,['user','context','statement','gapscan']) RETURN count(*);

Это создает несколько индексов для нескольких типов отношений.

Я также настроил триггер, чтобы каждый раз, когда добавляется связь (независимо от типа), она добавляется к индексу соответствующего типа.

CALL apoc.trigger.add('RELATIONSHIP_INDEX',"UNWIND {createdRelationships} AS r MATCH ()-[r]->() CALL apoc.index.addRelationship(r,['user','context','statement','gapscan']) RETURN count(*)", {phase:'after'})

Теперь я хочу настроить триггер, который удалял бы отношения из индекса при их удалении. Но нет процедуры removeRelationship - только removeRelationshipByName, однако я не понимаю, как ее использовать в этом контексте. Какое имя я должен указать?


person Aerodynamika    schedule 20.02.2018    source источник


Ответы (1)


Из документации / примера для apoc.index.addRelationship():

Оператор создаст индекс отношения с тем же именем, что и тип отношения.

Это имя индекса отношения и имя, предоставляемое removeRelationshipByName().

Именование в этой конкретной процедуре довольно сбивает с толку ... часть ByName относится к индексу отношения, а не к самому отношению.

person InverseFalcon    schedule 20.02.2018
comment
Спасибо, а значит, я не могу просто удалить связь из всех индексов? Приходится делать отдельный запрос для каждого, не так ли? - person Aerodynamika; 21.02.2018
comment
Поскольку отношение может иметь только один тип, и поскольку addRelationship() добавляет каждое отношение только к одному индексу, должен быть только один индекс, из которого нужно удалить отношение (его тип). - person InverseFalcon; 21.02.2018
comment
Фактически addRelationship () создает индекс для каждого типа отношений, поэтому я могу запустить триггер с одним запросом, чтобы обновить желаемые свойства в каждом из индексов для каждого типа отношений (как указано выше). однако я не могу этого сделать, когда удаляю отношения - тогда мне нужно настроить триггер для каждого типа отношений, как он выглядит ... - person Aerodynamika; 21.02.2018