2016-09-26 6 views
4

Наткнулся сценарий, когда мне нужно написать запрос, используя титан GraphTraversal API, который имеет различные положения, как в, содержит, в пределах и т.д.Как работает P.test (значение V) в запросе обхода графика в Titan?

Чтобы сформировать необходимые пункты я использующие 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 внутренне оценивает этот запрос? Означает ли он все предикаты после загрузки всех вершин в памяти?

ответ

1

Стандартные предикаты, такие как P.within, будут оптимизированы, когда это возможно (в вашем примере, если бы у вас был индекс за field1, Титан использовал бы его). Пользовательские предикаты, с другой стороны, не могут быть оптимизированы; как вы говорите, Titan загрузит все вершины в память, а затем применит предикат фильтра.