簡體   English   中英

復雜的Gremlin查詢以輸出節點/邊

[英]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內部進行了討論,以創建一種新型的管道實現方式來幫助實現這一目標,但目前尚不存在。

因此,如果沒有“間諜”功能,我認為您唯一的解決方法是:

  1. 在您的客戶端上檢測頂點/邊緣列表,僅使用d3渲染它們。 如果需要可視化,這將迫使用戶始終編寫返回這種格式的數據的gremlin。 放在用戶手中。
  2. 也許為頂點/邊列表提供服務器端綁定,如果結果不符合可視化引擎預期的結果,則用戶可以將頂點/邊顯式地副作用。 再次,如果需要可視化,這將迫使用戶根據需要編寫適當的gremlin。

暫無
暫無

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

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