[英]Gremlin query to find the entire sub-graph that a specific node is connected in any way to
我是 Gremlin 的新手,正在使用gremlin-python
遍歷我的圖表。 該圖由許多集群或子圖組成,這些集群或子圖是內部連接的,並且不與圖中的任何其他集群互連。
一個簡單的例子是一個有 5 個節點和 3 個邊的圖:
Customer_1
通過1_HasCreditCard_A
邊連接到CreditCard_A
Customer_2
通過2_HasCreditCard_B
邊緣連接到CreditCard_B
Customer_3
通過3_HasCreditCard_A
邊連接到CreditCard_A
我想要一個查詢,它將返回一個子圖 object 連接(輸入或輸出)到查詢節點的所有節點和邊。 然后我可以將這個子圖存儲為一個變量,然后在它上面運行不同的遍歷來計算不同的東西。
此查詢需要遞歸,因為這些集群可能由彼此相距許多(向內或向外)躍點的節點組成。 還有許多不同類型的節點和邊,它們都必須返回。
例如:
Customer_1
,則生成的子圖將包含Customer_1
、 Customer_3
、 CreditCardA
、 1_HasCreditCard_A
和3_HasCreditCard_A
。Customer_2
,則返回的子圖將包含Customer_2
、 CreditCard_B
、 2_HasCreditCard_B
。Customer_3
,將返回與Customer_1
查詢返回的完全相同的子圖 object。我已經使用了 Neo4J 和 Cypher 和 Dgraph 和 GraphQL 並發現在這兩種語言中這項任務很容易,但是在理解 grem 方面我有點掙扎。
編輯:
從這個問題,選擇的答案應該達到我想要的,但沒有通過將.both('created')
更改為 .both .both()
) 來指定邊緣類型。
但是,循環語法: .loop{true}{true}
當然在 Python 中是無效的。 這個循環 function 在gremlin-python
中可用嗎? 我找不到任何東西。
編輯2:
我已經嘗試過了,我認為它似乎按預期工作。
g.V(node_id).repeat(bothE().otherV().simplePath()).emit()
這是我正在尋找的有效解決方案嗎? 是否也可以在此結果中包含查詢的節點?
關於第二次編輯,這看起來像是一個有效的解決方案,它返回連接到起始頂點的所有頂點。 一些小修復:
bothE().otherV()
更改為both()
repeat
之前移動emit
步驟dedup
步驟來刪除所有重復的頂點(可以是超過 1 個頂點的路徑)g.V(node_id).emit().repeat(both().simplePath()).dedup()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.