2016-01-04 2 views
0

Я экспериментирую с Titan Graph Database. У меня был небольшой опыт Neo4j. В Neo4j существует очень удобный api для запроса вершина/узел с определенной меткой и значением свойства. В Neo4j:Найти вершину/узел с помощью Titan или TinkPop Java api

Node node = graph.findNode(label, propertyName, propertyValue); 

Конечно, индекс создан, чтобы ускорить этот процесс смотреть вверх.

В Titan, создать индекс, используя

TitanGraphIndex personIdIndex = titanManagement.buildIndex("personId", Vertex.class).addKey(personId).indexOnly(personLabel).unique().buildCompositeIndex(); 

Теперь я хочу найти/запрос для вершины с personLabel и конкретной PersonId. Как мне это сделать? Есть ли эквивалентный Java API в Titan или TinkerPop для этого?

ответ

0

После того, как вы построили свой индекс, он будет автоматически использоваться всякий раз, когда вы будете перемещаться, пока вы используете индексированную метку. В вашем случае, когда вы это сделаете:

Vertex v = graph.traversal().V().has("personId", "123").next(); 

Он будет автоматически проходить через индекс, чтобы ускорить его. Если вы попытаетесь сделать этот обход без индексации personId, то Titan предупредит вас, что он неэффективен.

Edit:

Только быстрое предупреждение, если вы индексирование строк или слова, то вы можете посмотреть на this и this. Нам нужна небольшая дополнительная настройка при индексировании слов и строк. То есть вам необходимо настроить составной ключ с соответствующим индексом.

+0

Большое спасибо. – liupro925

2

Чтобы использовать индекс, важно включать метку вершины в запросе:

g.V().has(label, propertyName, propertyValue) 

Для индексов ж/габаритная этикетки ограничения (indexOnly(label)), следующий запрос будет достаточно:

g.V().has(propertyName, propertyValue) 
+0

Большое спасибо. – liupro925

Смежные вопросы