[英]Complex Gremlin queries to output nodes/edges
我正在嘗試實現一個查詢和圖形可視化框架,該框架允許用戶輸入Gremlin查詢,並返回結果的D3圖形。 D3圖是使用JSON構建的-使用單獨的頂點和Gremlin查詢的邊輸出來創建。 對於簡單的查詢,例如:
g.V.filter{it.attr_a == "foo"}
這很好。 但是,當我嘗試執行以下更復雜的查詢時:
g.E.filter{it.attr_a == 'foo'}.groupBy{it.attr_b}{it.outV.value}.cap.next().findAll{k,e->e.size()<=3}
- Find all instances of *value*
- Grouped by unique *attr_b*
- Where *attr_a* = foo
- And *attr_b* is paired with no more than 2 other instances of *value*
而是,輸出具有以下形式:
attr_b1: {value1, value2, value3}
attr_b2: {value4}
attr_b3: {value6, value7}
我想知道Gremlin是否可以將結果輸出為節點和邊的列表,以便可以將結果顯示為圖形。 我知道我可以編輯D3代碼以接收此新輸出,但是當前對查詢的類型/復雜度沒有任何限制,因此鍵/值對不一定每次都相同。
謝謝。
您遇到了我認為可視化Gremlin結果的關鍵問題之一。 他們可以是任何東西。 Gremlin結果可能不僅是頂點和邊的列表。 我無法想到要真正控制這一點。 最終,您實際上只能可視化與D3期望的模式匹配的結果。 我將從嘗試檢測該模式並僅在那些情況下可視化開始(可能將無法識別的模式顯示為JSON)。
考慮一下您的特定示例,結果如下:
attr_b1: {value1, value2, value3}
attr_b2: {value4}
attr_b3: {value6, value7}
您想讓D3在這里看到什么? 遍歷以獲得結果的頂點/邊? 如果是這樣,您可能會被卡住。 格雷姆林(Gremlin)無法讓您對管道進行內部檢查以查看正在通過的內容。 換句話說,除非用戶在管道內顯式收集頂點和邊緣,否則您將無法訪問它們。 能夠以這種方式“偵聽”管道會很不錯,但目前還沒有做到這一點。 TinkerPop內部進行了討論,以創建一種新型的管道實現方式來幫助實現這一目標,但目前尚不存在。
因此,如果沒有“間諜”功能,我認為您唯一的解決方法是:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.