簡體   English   中英

Gremlin 查詢以查找特定節點以任何方式連接到的整個子圖

[英]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_1Customer_3CreditCardA1_HasCreditCard_A3_HasCreditCard_A
  • 如果我指定Customer_2 ,則返回的子圖將包含Customer_2CreditCard_B2_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()

示例:https://gremlify.com/jngpuy3dwg9

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM