簡體   English   中英

Titan db的嵌套遍歷gremlin查詢

[英]Nested traversal gremlin query for Titan db

我想知道如何有一個gremlin查詢以嵌套格式返回結果。 假設有如下屬性圖:

具有某些屬性的USERPAGE頂點,例如USER頂點的AGE

USERPAGE之間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.

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