หมายเหตุ
การเข้าถึงหน้านี้ต้องได้รับการอนุญาต คุณสามารถลอง ลงชื่อเข้าใช้หรือเปลี่ยนไดเรกทอรีได้
การเข้าถึงหน้านี้ต้องได้รับการอนุญาต คุณสามารถลองเปลี่ยนไดเรกทอรีได้
รูปแบบกราฟเป็นบล็อกการสร้างหลักของคิวรี GQL ของคุณในกราฟใน Microsoft Fabric ซึ่งอธิบายโครงสร้างที่คุณกําลังค้นหาในกราฟโดยใช้โหนดและขอบในลักษณะที่ใช้งานง่ายและการแสดงผลด้วยภาพ ให้คิดว่ารูปแบบกราฟเป็นเทมเพลตที่กลไกจัดการคิวรีพยายามจับคู่กับข้อมูลจริงในกราฟของคุณ
บทความนี้อธิบายไวยากรณ์และกฎองค์ประกอบสําหรับรูปแบบกราฟใน GQL
สําคัญ
บทความนี้ใช้ชุดข้อมูลกราฟตัวอย่างเครือข่ายสังคมโดยเฉพาะ
รูปแบบองค์ประกอบอย่างง่าย
รูปแบบองค์ประกอบแบบง่ายช่วยให้คุณจับคู่โหนดและขอบแต่ละอันจากกราฟของคุณที่ตรงตามข้อกําหนดเฉพาะ รูปแบบเหล่านี้จะสร้างพื้นฐานสําหรับการจับคู่รูปแบบที่ซับซ้อนมากขึ้น
รูปแบบโหนดอย่างง่าย
รูปแบบโหนดระบุป้ายชื่อและคุณสมบัติที่โหนดต้องตรงกัน:
(:Place&City { name: "New York" })
รูปแบบนี้ตรงกับโหนดทั้งหมดที่มีทั้งPlaceป้ายชื่อ และ City (ระบุโดยตัว&ดําเนินการ) และnameที่มีคุณสมบัติ เท่ากับ"New York" การรวมกันของป้ายชื่อและคุณสมบัติที่จําเป็นนี้เรียกว่า ฟิลเลอร์ ของรูปแบบโหนด
แนวคิดหลัก:
-
การจับคู่ป้ายชื่อ: ใช้
&เพื่อกําหนดป้ายชื่อหลายป้าย - การกรองคุณสมบัติ: ระบุค่าที่แน่นอนซึ่งคุณสมบัติต้องตรงกัน
- การจับคู่แบบยืดหยุ่น ("covariant") : โหนดที่ตรงกันสามารถมีป้ายชื่อและคุณสมบัติมากกว่าที่ระบุได้
Note
โหนดสามารถมีป้ายชื่อได้หลายป้าย แต่ยังไม่รองรับชนิดของขอบที่มีป้ายชื่อหลายป้าย
รูปแบบขอบอย่างง่าย
รูปแบบขอบจะซับซ้อนมากกว่ารูปแบบโหนด พวกเขาไม่เพียงแต่ระบุฟิลเลอร์ แต่ยังเชื่อมต่อรูปแบบโหนดต้นทางกับรูปแบบโหนดเป้าหมาย รูปแบบขอบอธิบายข้อกําหนดทั้งบนขอบและจุดสิ้นสุด:
(:Person)-[:likes|knows { creationDate: ZONED_DATETIME("2010-08-31T13:16:54Z") }]->(:Comment)
ทิศทาง -[...]-> ลูกศรมีความสําคัญ โดย (:Person) กําหนดเป็นรูปแบบโหนดต้นทางและเป็น (:Comment) รูปแบบโหนดเป้าหมาย การทําความเข้าใจทิศทางขอบเป็นสิ่งสําคัญสําหรับการคิวรีกราฟของคุณอย่างถูกต้อง
รูปแบบมิเรอร์ที่เทียบเท่า:
คุณสามารถพลิกลูกศรและสลับรูปแบบโหนดเพื่อสร้างรูปแบบขอบมิเรอร์ที่เทียบเท่ากัน:
(:Comment)<-[:likes { creationDate: ZONED_DATETIME("2010-08-31T13:16:54Z") }]-(:Person)
รูปแบบนี้ค้นหาความสัมพันธ์เดียวกัน แต่จากมุมมองตรงกันข้าม
รูปแบบขอบคําสั่งใดๆ
เมื่อทิศทางของขอบกราฟไม่สําคัญกับคิวรีของคุณ คุณสามารถปล่อยช่องนี้ไว้ตามที่ระบุได้โดยการสร้างรูปแบบขอบโดยตรง:
(:Song)-[:inspired]-(:Movie)
รูปแบบนี้ตรงกับขอบเดียวกันและ(:Song)-[:inspired]->(:Movie)(:Movie)-[:inspired]->(:Song)รวมกันโดยไม่คํานึงถึงโหนดใดเป็นต้นทางและโหนดใดเป็นเป้าหมาย (ตัวอย่างนี้ไม่ได้มาจากประเภทกราฟโซเชียลเน็ตเวิร์ก)
ทางลัดรูปแบบขอบกราฟ
GQL มีทางลัดที่สะดวกสําหรับรูปแบบขอบทั่วไปเพื่อให้คิวรีของคุณกระชับยิ่งขึ้น:
-
()->()ย่อมาจาก()-[]->()(ขอบที่กํากับด้วยป้ายชื่อใด ๆ) -
()<-()ย่อมาจาก()<-[]-()(ขอบตรงในด้านหลังที่มีป้ายชื่อใด ๆ) -
()-()ย่อมาจาก()-[]-()(ขอบที่มีป้ายชื่อใดก็ได้)
ทางลัดเหล่านี้จะเป็นประโยชน์เมื่อคุณสนใจเกี่ยวกับการเชื่อมต่อ แต่ไม่เกี่ยวกับชนิดขอบกราฟที่เฉพาะเจาะจง
นิพจน์ป้ายชื่อ
รูปแบบสามารถแสดงข้อกําหนดที่ซับซ้อนบนป้ายชื่อของโหนดและขอบที่ตรงกัน
ตัวอย่าง:
MATCH (:Person|(Organization&!Company))-[:isLocatedIn]->(p:City|Country)
RETURN count(*) AS num_matches
นับจํานวน isLocatedIn ขอบที่เชื่อมต่อ Person โหนดหรือ Organizationโหนด -but-not-Company (ซึ่งมักจะ University เป็นโหนดใน schema เครือข่ายทางสังคม) ไปยัง City หรือ Country โหนด
วากยสัมพันธ์:
| วากยสัมพันธ์ | ความหมาย |
|---|---|
A&B |
ป้ายชื่อต้องมีทั้ง A และ B |
A|B |
ป้ายชื่อต้องมีอย่างน้อยหนึ่ง A หรือ B |
!A |
ป้ายชื่อจําเป็นต้องไม่รวม A |
นอกจากนี้ ให้ใช้วงเล็บเพื่อควบคุมลําดับการประเมินนิพจน์ป้ายชื่อ ตาม!ค่าเริ่มต้น จะมีลําดับความสําคัญสูงสุดและ&มีความสําคัญสูงกว่า| ดังนั้น !A&B|C|!D จะเหมือนกับ((!A)&B)|C|(!D)
ตัวแปรการผูก
ตัวแปรช่วยให้คุณสามารถอ้างอิงถึงองค์ประกอบกราฟที่ตรงกันในส่วนอื่น ๆ ของคิวรีของคุณ การทําความเข้าใจวิธีการผูกและใช้ตัวแปรเป็นสิ่งจําเป็นสําหรับการสร้างคิวรีที่มีประสิทธิภาพ
ตัวแปรองค์ประกอบการผูก
ทั้งรูปแบบโหนดและขอบสามารถผูกโหนดและขอบที่จับคู่กับตัวแปรสําหรับการอ้างอิงในภายหลังได้
(p:Person)-[w:workAt]->(c:Company)
ในรูปแบบนี้ p ผูกกับโหนดPersonที่ตรงกัน w กับขอบที่ตรงกัน workAt และcโหนดที่ตรงกันCompany
ใช้ตัวแปรซ้ําสําหรับข้อจํากัดเชิงโครงสร้าง:
การนําตัวแปรเดียวกันมาใช้ใหม่ในรูปแบบหลายครั้งแสดงข้อจํากัดเกี่ยวกับโครงสร้างของการจับคู่ การเกิดขึ้นของตัวแปรเดียวกันทุกครั้งจะต้องผูกกับองค์ประกอบกราฟเดียวกันในการจับคู่ที่ถูกต้องเสมอ การนําตัวแปรกลับมาใช้ใหม่มีประสิทธิภาพสําหรับการแสดงข้อกําหนดด้านโครงสร้างที่ซับซ้อน
(c:Company)<-[:workAt]-(x:Person)-[:knows]-(y:Person)-[:workAt]->(c:Company)
รูปแบบ จะค้นหาPersonโหนดxและyที่รู้จักซึ่งกันและกัน และทํางานในเวลาเดียวกัน Companyซึ่งผูกไว้กับตัวแปรc การนํากลับมาใช้ c ใหม่เพื่อให้แน่ใจว่าทั้งสองคนทํางานอยู่ที่บริษัทเดียวกัน
เพรดิเคตรูปแบบที่มีตัวแปรองค์ประกอบ:
ตัวแปรองค์ประกอบการผูกช่วยให้คุณสามารถระบุเพรดิเคตรูปแบบโหนดและขอบได้ แทนที่จะให้ตัวเติมด้วยค่าคุณสมบัติที่แน่นอน เช่น { name: "New York, USA" }ตัวเติมสามารถระบุเพรดิเคตที่ได้รับการประเมินสําหรับแต่ละองค์ประกอบของผู้สมัครได้ รูปแบบจะจับคู่ก็ต่อเมื่อเพรดิเคตประเมินเป็น TRUE:
(p:Person)-[e:knows WHERE e.creationDate >= ZONED_DATETIME("2000-01-01T18:00:00Z")]-(o:Person)
รูปแบบ edge ค้นหาบุคคลที่รู้จักกันตั้งแต่วันที่ 1 มกราคม 2000 โดยใช้เงื่อนไขที่ยืดหยุ่นมากกว่าการจับคู่ที่แน่นอน
Note
ตัวแปรรูปแบบขอบผูกกับขอบแต่ละขอบในเพรดิเคตรูปแบบขอบเสมอแม้ว่าคุณจะใช้รูปแบบความยาวตัวแปรก็ตาม ซึ่งสามารถช่วยในการไม่ต้องไม่สรรหาตัวแปรรายการกลุ่มขอบเพื่อดําเนินการหลังตัวกรองได้ ดูที่ ผูกตัวแปรของขอบรูปแบบความยาวตัวแปร
เทคนิคเพรดิเคตรูปแบบขั้นสูง:
เพรดิเคตรูปแบบให้ความสามารถในการกรองแบบอินไลน์ที่มีประสิทธิภาพซึ่งสามารถปรับปรุงความสามารถในการอ่านคิวรีได้:
-- Multiple conditions in node predicates
MATCH (p:Person WHERE p.birthday < 19900101 AND p.gender = 'female')
-[:workAt]->
(c:Company WHERE c.name STARTS WITH 'A')
-- Filter on an edge property
MATCH (p1:Person)-[w:workAt WHERE w.workFrom >= 2010]->(c:Company)
-- MATCH WHERE: evaluated after pattern matching
MATCH (p:Person)-[:workAt]->(c:Company)
WHERE p.browserUsed = 'Firefox' AND c.name IS NOT NULL
-- Filter during matching and after
MATCH (p:Person WHERE p.gender = 'male')-[:workAt]->(c:Company)
WHERE p.birthday < 19900101 AND c.url IS NOT NULL
เคล็ดลับ
ให้เก็บ predicate ไว้ในแพทเทิร์นเมื่ออธิบายว่าโหนดหรือขอบใดสามารถเข้าร่วมการจับคู่ได้
ตัวแปรการผูกเส้นทาง
คุณยังสามารถผูกเส้นทางที่ตรงกันกับตัวแปรเส้นทางสําหรับการประมวลผลเพิ่มเติม หรือเพื่อส่งกลับโครงสร้างเส้นทางที่สมบูรณ์ให้กับผู้ใช้:
p=(c:Company)<-[:workAt]-(x:Person)-[:knows]-(y:Person)-[:workAt]->(c:Company)
pที่นี่ ถูกผูกไว้กับค่าเส้นทางที่แสดงโครงสร้างเส้นทางที่ตรงกันทั้งหมด รวมถึงค่าอ้างอิงสําหรับโหนดและขอบทั้งหมดตามลําดับที่กําหนด
เส้นทางที่ถูกผูกไว้สามารถส่งคืนไปยังผู้ใช้หรือประมวลผลเพิ่มเติมโดยใช้ฟังก์ชันเช่น NODES หรือ :EDGES
MATCH p=(c:Company)<-[:workAt]-(x:Person)-[:knows]-(y:Person)-[:workAt]->(c:Company)
LET path_edges = edges(p)
RETURN path_edges, size(path_edges) AS num_edges
GROUP BY path_edges
รูปแบบการเรียบเรียง
คิวรีในโลกแห่งความเป็นจริงมักต้องการรูปแบบที่ซับซ้อนมากกว่าโครงสร้าง node-edge แบบง่าย GQL มีหลายวิธีในการเขียนรูปแบบสําหรับการย้อนกลับของกราฟที่มีความซับซ้อน
รูปแบบเส้นทางการเขียน
รูปแบบเส้นทางสามารถเขียนได้โดยการเชื่อมโหนดอย่างง่ายและรูปแบบขอบเข้าด้วยกันเพื่อสร้างการกลับรายการที่ยาวขึ้น
(:Person)-[:knows]->(:Person)-[:workAt]->(:Company)-[:isLocatedIn]->(:Country)-[:isPartOf]->(:Continent)
รูปแบบการสํารวจจากบุคคลผ่านการเชื่อมต่อทางสังคมและอาชีพเพื่อค้นหาว่า บริษัท ของเพื่อนร่วมงานอยู่ที่ไหน
หนึ่งชิ้นก่อสร้างรูปแบบ: นอกจากนี้ คุณยังสามารถสร้างรูปแบบเส้นทางแบบเพิ่มทีละส่วนมากขึ้น ซึ่งสามารถทําให้ง่ายต่อการอ่านและทําความเข้าใจรูปแบบที่ซับซ้อน:
(:Person)-[:knows]->(p:Person),
(p:Person)-[:workAt]->(c:Company),
(c:Company)-[:isLocatedIn]->(:Country)-[:isPartOf]->(:Continent)
วิธีนี้จะแยกแยะการกลับรายการเดียวกันเป็นขั้นตอนเชิงตรรกะ ทําให้ง่ายต่อการทําความเข้าใจและดีบัก
เขียนรูปแบบที่ไม่ใช่เชิงเส้น
รูปร่างที่เป็นผลลัพธ์ของรูปแบบไม่จําเป็นต้องเป็นเส้นทางเชิงเส้น คุณสามารถจับคู่โครงสร้างที่ซับซ้อนมากขึ้นได้ เช่น รูปแบบ "รูปดาว" ที่แผ่ขยายจากโหนดกลาง:
(p:Person),
(p)-[:studyAt]->(u:University),
(p)-[:workAt]->(c:Company),
(p)-[:likes]-(m)
รูปแบบค้นหาบุคคลพร้อมกับการศึกษา การจ้างงาน และการกําหนดลักษณะเนื้อหาทั้งหมดในครั้งเดียว - คิวรีโปรไฟล์ที่ครอบคลุม
รูปแบบในไฟล์เดียวกัน MATCH ไม่จําเป็นต้องใช้ตัวแปรร่วมกัน รูปแบบที่ไม่เชื่อมต่อกันจะสร้างผลคูณแบบคาร์ทีเซียนของไม้จับคู่ ใช้ตัวแปรซ้ําเมื่อรูปแบบควรผูกกับองค์ประกอบกราฟเดียวกันและควรเหลือเฉพาะการรวมกันเท่านั้น
การนําองค์ประกอบควบคุมกลับมาใช้ใหม่
GQL ควบคุมโหนดและขอบที่ซ้ํากันในสองระดับ:
- โหมดจับคู่จะใช้กับรูปแบบกราฟทั้งหมด รวมถึงเส้นทางที่คั่นด้วยเครื่องหมายจุลภาค
- โหมดเส้นทางจะใช้กับเส้นทางเดียว
โหมดจับคู่เริ่มต้นคือ REPEATABLE ELEMENTS. มันอนุญาตให้การผูกพันองค์ประกอบเดียวกันเกิดขึ้นในส่วนต่าง ๆ ของรูปแบบกราฟ โดยขึ้นอยู่กับโหมดเส้นทางของแต่ละเส้นทาง คุณสามารถเขียนมันอย่างชัดเจนได้ว่า:
REPEATABLE ELEMENTS (a)-[e1:knows]->(b), (a)-[e2:knows]->(c)
ใช้ DIFFERENT EDGES คําพ้อง DIFFERENT RELATIONSHIPS ความหมายเพื่อกําหนดให้ต้องมีความเป็นเอกลักษณ์ของขอบในทุกรูปแบบกราฟทั้งหมด โหมดแมตช์นี้ยังเปลี่ยนเส้นทางใด ๆ WALK ในรูปแบบพฤติกรรม TRAIL ด้วย
DIFFERENT EDGES (a)-[e1:knows]->(b), (a)-[e2:knows]->(c)
โหมดเส้นทางต่อไปนี้ควบคุมองค์ประกอบที่ซ้ํากันภายในแต่ละเส้นทาง:
| โหมดเส้นทาง | การนําธาตุกลับมาใช้ใหม่ |
|---|---|
WALK |
โหนดและขอบสามารถทําซ้ําได้ |
TRAIL |
ขอบไม่สามารถซ้ําได้ แต่โหนดสามารถซ้ําได้ |
SIMPLE |
โหนดไม่สามารถทําซ้ําได้ ยกเว้นว่าโหนดแรกและโหนดสุดท้ายอาจเหมือนกัน ขอบไม่สามารถซ้ํารอยได้ |
ACYCLIC |
โหนดไม่สามารถทําซ้ําได้ รวมถึงโหนดแรกและโหนดสุดท้ายด้วย ขอบไม่สามารถซ้ํารอยได้ |
WALK เป็นโหมดเส้นทางเริ่มต้น เติม path ด้วยโหมดอื่นเมื่อคุณต้องการความเป็นเอกลักษณ์ขององค์ประกอบที่เข้มงวดขึ้น:
สําหรับ SIMPLE และ ACYCLIC, ความเป็นเอกลักษณ์ของขอบจะมาจากความเป็นเอกลักษณ์ของโหนด
SIMPLEเส้นทางสามารถปิดได้โดยกลับไปยังโหนดแรก แต่ก็ยังไม่สามารถใช้ขอบซ้ําได้
TRAIL (a)-[e1:knows]->(b)-[e2:knows]->(c)-[e3:knows]->(d)
รูปแบบนี้จะ TRAIL ให้ผลตรงกับที่ e1, e2, และ e3 แตกต่างกันเท่านั้น โหนดยังสามารถทําซ้ําได้ ดังนั้นเส้นทางจึงสามารถสร้างวงจรได้โดยไม่ต้องใช้ขอบซ้ํา
ควบคุมเส้นทางที่ส่งคืน
คํานําหน้าการค้นหาเส้นทางจะควบคุมว่ารูปแบบเส้นทางใดจะคืนค่า คํานําหน้าเริ่มต้นจะ ALL คืนค่าทุกเส้นทางที่ตรงกับโหมดและรูปแบบของเส้นทาง คุณสามารถเขียน ALL ได้อย่างชัดเจนว่า:
ALL TRAIL (a:Person)-[:knows]->{1,4}(b:Person)
ใช้เพื่อ ANY SHORTEST คืนค่าเส้นทางที่ตรงกันสั้นที่สุดสําหรับแต่ละคู่ต้นทาง-ปลายทางจากแต่ละแถวอินพุต:
MATCH p = ANY SHORTEST
(src:Person)-[:knows]->{1,4}(dst:Person)
RETURN src.id AS sourceId, dst.id AS targetId, path_length(p) AS hopCount
ORDER BY sourceId, targetId
LIMIT 100
ถ้าหลายเส้นทางมีความยาวสั้นที่สุดเท่ากัน คําค้นหาจะคืนค่าหนึ่งเส้นทาง แต่เส้นทางที่ผูกกันนั้นไม่แน่นอน ขอบเขตล่างเป็นศูนย์สามารถคืนเส้นทางศูนย์จากโหนดต้นทางไปยังตัวมันเองได้
ALL SHORTEST และ ANY การค้นหาเส้นทางไม่รองรับ
วางเงื่อนไขก่อนหรือหลังการเลือกเส้นทาง
ตําแหน่งของคําบรรยายกําหนดว่าเงื่อนไขจะกําหนดเส้นทางที่มีสิทธิ์หรือกรองเส้นทางหลังจากที่คํานําหน้าการค้นหาเส้นทางได้เลือกแล้ว:
- ลวดลาย inline
WHEREin in node หรือขอบเป็นส่วนหนึ่งของลวดลายนั้น มันจํากัดว่าเส้นทางใดมีสิทธิ์ก่อนALLหรือANY SHORTESTถูกนําไปใช้ - ระดับ
WHEREคําสั่งหลังแพทเทิร์นสมบูรณ์MATCHเรียกว่า postfilter มันกรองแถวหลังจากที่คํานําหน้าการค้นหาเส้นทางได้เลือกเส้นทางแล้ว - คําสั่งถัดไป
FILTERจะกรองแถวหลังจากเลือกเส้นทางด้วย
ความแตกต่างนี้มีความสําคัญอย่างยิ่งกับ ANY SHORTEST. ในรูปแบบต่อไปนี้ เฉพาะ knows ขอบที่สร้างในหรือหลังจากวันที่ที่ระบุเท่านั้นที่มีสิทธิ์เมื่อคําสั่งค้นหาเลือกเส้นทางที่สั้นที่สุด:
MATCH p = ANY SHORTEST
(src:Person WHERE src.firstName = 'Alice')
-[connection:knows
WHERE connection.creationDate >= ZONED_DATETIME('2020-01-01T00:00:00Z')]->{1,4}
(dst:Person WHERE dst.firstName = 'Bob')
RETURN p
การย้ายเงื่อนไขขอบไปยัง postfilter จะเปลี่ยนความหมาย คําค้นหาจะเลือกเส้นทางที่สั้นที่สุดโดยไม่มีเงื่อนไขนั้นก่อน จากนั้นจะลบเส้นทางที่เลือกหากขอบใดไม่ผ่านเงื่อนไข;แต่จะไม่เลือกเส้นทางที่ยาวกว่า:
MATCH p = ANY SHORTEST
(src:Person WHERE src.firstName = 'Alice')
-[connections:knows]->{1,4}
(dst:Person WHERE dst.firstName = 'Bob')
FILTER ALL(connection IN connections
WHERE connection.creationDate >= ZONED_DATETIME('2020-01-01T00:00:00Z'))
RETURN p
สําคัญ
สําหรับ ANY SHORTEST รูปร่างบางประเภท Graph สามารถใช้เงื่อนไขระดับ MATCH ... WHERE คําสั่งก่อนการเลือกเส้นทางได้ในปัจจุบัน จนกว่าข้อจํากัดนี้จะได้รับการแก้ไข ให้ใช้ตัวระบุแบบอินไลน์สําหรับคุณสมบัติของเส้นทาง และใช้คําสั่งแยกต่างหาก FILTER สําหรับการกรองหลังการเลือก สําหรับข้อมูลเพิ่มเติม โปรดดู ข้อจํากัดปัจจุบัน
ใช้รูปแบบความยาวผันแปร
รูปแบบความยาวตัวแปรเป็นโครงสร้างที่มีประสิทธิภาพซึ่งช่วยให้คุณค้นหาเส้นทางของความยาวที่แตกต่างกันโดยไม่ต้องเขียนข้อกําหนดรูปแบบที่ซ้ํา ๆ ซึ่งจําเป็นสําหรับการย้อนกลับลําดับชั้น เครือข่ายทางสังคม และโครงสร้างอื่น ๆ ที่ไม่มีความยาวของเส้นทางที่เหมาะสมล่วงหน้า
รูปแบบความยาวตัวแปรที่ผูกไว้
คิวรีกราฟทั่วไปจํานวนมากจําเป็นต้องมีรูปแบบขอบเดียวกันซ้ําหลายครั้ง แทนที่จะเขียนรูปแบบอย่างละเอียด เช่น:
(:Person)-[:knows]->(:Person)-[:knows]->(:Person)-[:knows]->(:Person)
คุณสามารถใช้ไวยากรณ์ที่มีความยาวตัวแปรที่กระชับมากขึ้นได้:
(:Person)-[:knows]->{3}(:Person)
ระบุว่า{3}-[:knows]->รูปแบบขอบควรทําซ้ําสามครั้ง
ช่วงที่ยืดหยุ่นการทําซ้ํา: เพื่อให้มีความยืดหยุ่นมากขึ้น คุณสามารถระบุทั้งขอบเขตที่ต่ํากว่าและขอบเขตด้านบนสําหรับการทําซ้ําได้:
(:Person)-[:knows]->{1, 3}(:Person)
รูปแบบนี้ค้นหาเพื่อนโดยตรงเพื่อนของเพื่อนและเพื่อน - เพื่อนของเพื่อนทั้งหมดในการคิวรีเดียว
Note
ขอบเขตล่างก็สามารถเป็นศูนย์ได้เช่นกัน การจับคู่แบบ zero-hop ไม่มีขอบและต้องการให้รูปแบบโหนดปลายทางทั้งสองตรงกันกับโหนดเดียวกัน
ตัวอย่าง:
(p1:Person)-[:knows]->{0,1}(p2:Person)
รูปแบบนี้จะจับคู่แต่ละคนเป็นทั้ง p1 และ p2 ที่ zero hops และจับคู่คู่ที่เชื่อมต่อกันที่ 1 hop
เมื่อไม่มีการระบุขอบเขตล่างใน {,n}, จะตั้งค่าเริ่มต้นเป็นศูนย์
องค์ประกอบความยาวตัวแปรที่ซับซ้อน: รูปแบบความยาวตัวแปรสามารถเป็นส่วนหนึ่งของรูปแบบที่ใหญ่กว่าและซับซ้อนมากขึ้นได้ดังในแบบสอบถามต่อไปนี้:
MATCH (c1:Comment)<-[:likes]-(p1:Person)-[:knows]-(p2:Person)-[:likes]->(c2:Comment),
(c1:Comment)<-[:replyOf]-{1,3}(m)-[:replyOf]->{1,3}(c2:Comment)
RETURN *
LIMIT 100
รูปแบบนี้จะค้นหาคู่ความคิดเห็นที่คนที่รู้จักกันกดไลค์ความคิดเห็นต่างกัน และข้อความ m หนึ่งจะถูกเชื่อมโยงกับแต่ละความคิดเห็นด้วยสายของขอบหนึ่งถึงสาม replyOf เส้น
ตัวแปรขอบรูปแบบความยาวตัวแปรผูก
เมื่อคุณผูกรูปแบบขอบความยาวตัวแปร ค่าและชนิดของตัวแปรขอบจะเปลี่ยนแปลงโดยขึ้นอยู่กับบริบทการอ้างอิง การทําความเข้าใจลักษณะการทํางานนี้เป็นสิ่งสําคัญสําหรับการจับคู่การประมวลผลความยาวตัวแปรอย่างถูกต้อง:
การอ้างอิงสององศา:
- ภายในรูปแบบความยาวตัวแปร: ตัวแปรขอบกราฟที่ผูกกับแต่ละขอบตามเส้นทางที่ตรงกัน (หรือที่เรียกว่า "ระดับการอ้างอิงแบบ singleton")
- ภายนอกรูปแบบความยาวตัวแปร: ตัวแปรขอบกราฟผูกกับลําดับของขอบทั้งหมดตามเส้นทางที่ตรงกัน (หรือที่เรียกว่า "ระดับกลุ่มของการอ้างอิง")
ตัวอย่างที่สาธิตบริบททั้งสอง:
MATCH (:Person)-[e:knows WHERE e.creationDate >= ZONED_DATETIME("2000-01-01T00:00:00Z")]->{1,3}()
RETURN e[0]
LIMIT 100
การประเมินผลของตัวแปร e ขอบจะเกิดขึ้นในสองบริบท:
ใน
MATCHคําชี้แจง: คิวรีค้นหาห่วงโซ่ของเพื่อน-เพื่อน-เพื่อน-เพื่อนที่มีการสร้างมิตรภาพแต่ละครั้งตั้งแต่ปี 2000 ในระหว่างการจับคู่รูปแบบ เพรดิเคตe.creationDate >= ZONED_DATETIME("2000-01-01T00:00:00Z")รูปแบบขอบจะถูกประเมินหนึ่งครั้งสําหรับแต่ละขอบผู้สมัคร ในบริบทeนี้ ผูกกับค่าการอ้างอิงขอบเดียวใน
RETURNคําสั่ง: ที่นี่eถูกผูกไว้กับรายการ (กลุ่ม) ของค่าการอ้างอิงขอบตามลําดับที่เกิดขึ้นในสายงานที่ตรงกัน ผลลัพธ์ของe[0]คือค่าการอ้างอิงขอบแรกในแต่ละห่วงโซ่ที่ตรงกัน
ตัวแปรขอบรูปแบบความยาวตัวแปรในการรวมแนวนอน:
ตัวแปร Edge ที่ผูกไว้ด้วยการจับคู่รูปแบบความยาวตัวแปรคือรายการกลุ่มที่อยู่นอกรูปแบบความยาวตัวแปร ดังนั้นจึงสามารถใช้ในการรวมแนวนอนได้
MATCH (a:Person)-[e:knows WHERE e.creationDate >= ZONED_DATETIME("2000-01-01T00:00:00Z")]->{1,3}(b)
RETURN a, b, size(e) AS num_edges
LIMIT 100
สําหรับข้อมูลเพิ่มเติม ดูที่ ฟังก์ชันรวมข้อมูล
รูปแบบความยาวตัวแปรที่ไม่ผูก
ใช้ตัวบ่งชี้ปริมาณที่ไม่มีขอบเขตเมื่อความยาวเส้นทางสูงสุดไม่ทราบ:
-- Two or more edges
TRAIL (:Person)-[:knows]->{2,}(:Person)
ทางลัดและ*+ระบุจํานวนครั้งที่ทําซ้ําเป็นศูนย์หรือมากกว่าและหนึ่งหรือมากกว่า:
-- Zero or more edges
ACYCLIC (:Person)-[:knows]->*(:Person)
-- One or more edges
SIMPLE (:Person)-[:knows]->+(:Person)
รูปแบบที่ไม่มีขอบเขตแต่มีค่าผสมเริ่มต้น ALL WALK จะถูกปฏิเสธเพราะวงจรสามารถสร้างเส้นทางที่จับคู่กันได้ไม่จํากัดจํานวน ใช้ TRAIL, SIMPLE, หรือ ACYCLIC เพื่อจํากัดเส้นทางผ่านความเป็นเอกลักษณ์ของขอบหรือโหนด โหมดเหล่านี้รับประกันการสิ้นสุด แต่กราฟขนาดใหญ่ยังสามารถสร้างเส้นทางจํานวนมากได้
สําคัญ
สําหรับเส้นทางที่ผูกพันด้วยค่าที่ไม่มีขอบเขต ANY SHORTEST WALKการใช้งานที่รองรับมีเพียง PATH_LENGTH(path) และ ข้าง ๆ นั้น path IS NULL กราฟไม่สามารถแสดงเส้นทางทั้งหมดในรูปแบบนี้ได้ ใช้ขอบเขตบนจํากัด หรือระบุ TRAIL, SIMPLE, หรือ ACYCLIC เพื่อคืนค่าหรือใช้เส้นทาง