[英]Nested traversal gremlin query for Titan db
我想知道如何有一個gremlin查詢以嵌套格式返回結果。 假設有如下屬性圖:
具有某些屬性的USER
和PAGE
頂點,例如USER
頂點的AGE
;
在USER
和PAGE
之間FOLLOW
邊;
我正在尋找一個有效的查詢,該查詢將為所有年齡大於20歲的用戶以及這些用戶提供的所有后續頁面。 我可以從應用程序端使用一個簡單的循環來做到這一點,並且每次迭代都使用一個簡單的遍歷查詢。 不幸的是,這種解決方案對我來說效率不高,因為它將生成大量查詢,並且在這種情況下網絡延遲可能會很大。
不知道您對“有效”的定義是什么,但是請記住,這是一個典型的OLAP用例,您不應期望快速的OLTP實時響應。
也就是說,查詢應該很簡單:
g.V().has("USER", "AGE", gt(20)).as("user").
map(out("FOLLOW").fold()).as("pages").
select("user", "pages")
一個使用現代樣本圖的小例子:
gremlin> g = TinkerFactory.createModern().traversal().withComputer()
==>graphtraversalsource[tinkergraph[vertices:6 edges:6], graphcomputer]
gremlin> g.V().has("person", "age", gt(30)).as("user").
map(out("created").fold()).as("projects").
select("user","projects")
==>[user:v[6], projects:[v[3]]]
==>[user:v[4], projects:[v[5], v[3]]]
這很簡單:
g.V().label('user').has('age',gt(20))
.match(__.as('user').out('follows').as('page'))
.select('user','page')
請注意,當您在gremlin中使用此查詢時,gremlin為您提供了空指針異常,您可以在代碼中使用它,並檢查'page'是否存在得到該提示。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.