Индексация в Титане/Янусе

У меня есть 2 вопроса:

  1. Как проиндексировать этот запрос?

    g.V(vertexId).repeat(out().hasLabel('location')).emit().tree().next()
    
  2. #P3# <блочная цитата> #P4#

Мой подход был

def location = mgmt.makeVertexLabel("location").make()
def displayName = mgmt.makePropertyKey("displayName").dataType(String.class).cardinality(Cardinality.SINGLE).make()
def shortName = mgmt.makePropertyKey("shortName").dataType(String.class).cardinality(Cardinality.SINGLE).make()
def description = mgmt.makePropertyKey("description").dataType(String.class).cardinality(Cardinality.SINGLE).make()
def latitude = mgmt.makePropertyKey("latitude").dataType(String.class).cardinality(Cardinality.SINGLE).make()
def longitude = mgmt.makePropertyKey("longitude").dataType(String.class).cardinality(Cardinality.SINGLE).make()

def locationByName = mgmt.buildIndex("displayNameAndShortNameAndDescriptionAndLatitudeAndLongitude", Vertex.class).addKey(displayName).addKey(shortName).addKey(description)
.addKey(latitude).addKey(longitude).indexOnly(location).buildMixedIndex('search')

Где я ошибаюсь?


person Abhishek Raj    schedule 03.07.2017    source источник


Ответы (2)


  1. Если этот запрос занимает много времени, проблема, скорее всего, в том, что он посещает слишком много элементов или застревает в бесконечном цикле. Существующие индексы JanusGraph/Titan в этом не помогут. У вас уже есть прямой поиск вершины по идентификатору g.V(vertexId), а остальная часть запроса проходит по соседству от этой вершины. Я бы предложил использовать метки ребер, например out('friends'), чтобы ограничить количество посещенных вами ребер. Вы также можете использовать simplePath() для устранения циклических путей. Вы также можете использовать times() или until(), чтобы ограничить количество циклов с repeat() шаг.

  2. В примере конфигурации, на который вы ссылались, использовались только составные индексы, для которых не требуется серверная часть индексирования.

Смешанные индексы требуют настройки серверной части индексирования, Elasticsearch, Lucene или Солр. Выберите один из них, а затем убедитесь, что вы передаете правильные свойства конфигурации при инициализации графа. Вы можете найти несколько примеров в zip-файле дистрибутива в каталоге conf. Например, в janusgraph-cassandra-es.properties вы найдете:

index.search.backend=elasticsearch
index.search.hostname=127.0.0.1
index.search.elasticsearch.client-only=true

где search в index.X.backend — это выбранное имя конфигурации индекса, которое вы должны передать в buildMixedIndex(X).

person Jason Plurad    schedule 03.07.2017

Вот ответ. И составной, и смешанный индекс доступны только для запроса гремлина первого уровня, но не для второго уровня. Вершинно-центрический индекс требуется для запроса второго уровня.

person John    schedule 06.07.2017