java – Titan图遍历查询中的P.test(V值)如何工作?

遇到了我需要使用
GraphTraversal api编写titan查询的场景,其中包含各种子句,如in,contains,within等.

为了形成所需的条款,我使用P.within(..),P.inside(..),P.test(..)等谓词.以下是遍历实例的说明

traversal.has("field1", P.within(new String[]{"value1", "value2"})).
            has("field2", P.test((r1, r2) -> {
                    return ((String)r1)).contains((String)r2));
                }, "someVal"));

我想了解Titan如何在内部评估此查询?
它是否在内存中加载所有顶点后评估所有谓词?

最佳答案 像P.within这样的标准谓词将尽可能优化(在你的例子中,如果你有一个索引超过field1,Titan会使用它).另一方面,自定义谓词无法优化;如你所说,Titan会将所有顶点加载到内存中,然后应用过滤谓词.

点赞