![](/img/trans.png)
[英]How to get multiple vertices that match the condition in a single gremlin query
[英]Gremlin query hangs with and/or condition
我有一個圖 model region
(頂點)-> has_person
(邊)-> person
(頂點)。 我想獲得具有名為 Tom 的person
的region
頂點。
此查詢工作正常: gV().hasLabel("person").has("name", "Tom").inE("has_person").outV().hasLabel("region")
。
但是為什么以下查詢會掛起:
g.V().hasLabel("region").and(
__.hasLabel("person").has("name", "Tom").inE("has_person").outV().hasLabel("region")
)
g.V().and(
__.hasLabel("person").has("name", "Tom").inE("has_person").outV().hasLabel("region")
).hasLabel("region")
在使用 Gremlin 編寫圖遍歷時,您需要考慮您使用的圖數據庫如何優化您的遍歷(例如,是否使用了全局索引)?
您應該考慮圖形數據庫的索引能力並檢查profile()
步驟的 output。 它會告訴您是否正在使用索引以及在哪里使用。 我的猜測是,“正常”工作的查詢正在使用和索引來查找“Tom”,然后能夠快速遍歷該索引以找到與他相關的“has_person”邊緣的區域。 大多數圖表都能夠優化這種模式。 大多數圖表通常不會對“掛起”的以下查詢進行優化以利用索引,這主要是因為您使用and()
步驟選擇的模式不是大多數優化所尋求的模式。 我的猜測是,這兩種遍歷幾乎都是在內存中過濾的。
Fwiw,你的查詢“正常”是寫的最佳方式,我認為你的 state 是你想要的 output。 我認為您的第一個懸掛查詢不會返回結果,因為它要求頂點具有 label 既是“區域”又是“人”,這是不可能的。 第二個掛起的查詢似乎首先不需要and()
並且雙重過濾“區域”label。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.