Отправка нескольких операторов Cypher, разделенных точкой с запятой, через браузер Neo4j

Я хочу отправить список операторов записи Cypher, разделенных точкой с запятой, через веб-браузер, но получаю ошибки ...

MERGE (a:user{id: 'A'}) 
MERGE (b:product{id: '1'}) 
CREATE UNIQUE (a)-[:USED_BY]->(b); 


MERGE (a:user{id: 'B'}) 
MERGE (b:product{id: '4'})  
CREATE UNIQUE (a)-[:USED_BY]->(b); 

Я создаю новые узлы и ссылаюсь на них в более поздних заявлениях о взаимосвязях, поэтому я хочу отправлять отдельные запросы, а не один длинный, и я хотел бы сделать это через Cypher.

Как лучше всего это сделать?


person Dirk Calloway    schedule 06.12.2013    source источник
comment
Отправил запрос функции для этого: github.com/neo4j/neo4j/issues/3908   -  person Kees de Kooter    schedule 29.01.2015
comment
Вместо этого вы должны сделать это в оболочке.   -  person Nicole White    schedule 30.01.2015


Ответы (6)


Теперь для этого есть простая настройка: Enable multi statement query editor.

Затем вы можете запустить несколько операторов, разделенных точкой с запятой ;

снимок экрана neo4j с выделенной настройкой и результатом обоих приведенных выше утверждений

person jpenna    schedule 30.08.2019

Я нашел решение на странице Несколько несвязанных запросов в Neo4j Cypher?

Просто поместите WITH count(*) as dummy между независимыми командами.

person NikoNyrh    schedule 03.01.2016

Это не ошибка, а ожидаемое поведение (на момент написания, например, Neo4j 2.2 и ранее).

Браузер Neo4j запускает каждую введенную команду как отдельный запрос и отображает результаты этого запроса. Он не поддерживает множественные запросы (или подразумеваемые множественные наборы результатов!).

Обратите внимание, что можно использовать оболочку neo4j для выполнения нескольких запросов, как вы пытаетесь это сделать. Результаты каждой отдельной команды будут записаны в stdout. Примеры находятся в документации: http://neo4j.com/docs/stable/shell-sample-session.html

person Chris Leishman    schedule 29.01.2015

Насколько я знаю, это невозможно сделать напрямую, хотя, если у вас есть python, вы можете установить py2neo, а затем использовать очень простой фрагмент, который использует REST api neo4j, т.е.

from py2neo import cypher

session = cypher.Session("http://localhost:7474/db/data/")
tx = session.create_transaction()
cypher = [
    "MERGE (a:user{id: 'A'})"
    "MERGE (b:product{id: '1'})"
    "CREATE UNIQUE (a)-[:USED_BY]->(b)", #first statement 

    "MERGE (a:user{id: 'B'})" 
    "MERGE (b:product{id: '4'})"
    "CREATE UNIQUE (a)-[:USED_BY]->(b)" #second statement
] 

for q in cypher:
    tx.append(q)

tx.commit()

это сделает работу.

person Victor Ermolaev    schedule 24.01.2014

Преобразуйте все ваши операторы Cypher в одну строку и поместите пробел между каждым из операторов. Это работает в консоли браузера neo4j.

person Deepita Pai    schedule 18.09.2015

Я считаю, что apoc.cypher.runMany сделает свое дело.

CALL apoc.cypher.runMany(statement, {})

(Я пытаюсь это сделать с помощью драйвера Python. Позже я обновлю этот пост своими выводами.)

person Clem Wang    schedule 17.05.2021