การส่งคำสั่ง 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 Driver ฉันจะอัปเดตโพสต์นี้ในภายหลังพร้อมกับสิ่งที่ฉันค้นพบ)

person Clem Wang    schedule 17.05.2021