2017-07-03 2 views
1

J'ai 2 questions:indexation dans Titan/Janus

  1. Comment indexer cette requête?

    g.V(vertexId).repeat(out().hasLabel('location')).emit().tree().next() 
    
  2. dans la documentation Titan 1.0, il n'y a que des moyens donnés pour indexer le graphique une fois lorsque les données sont déjà inséré. Cependant dans le fichier generate-modern.groovyhere
    on voit que l'indexation est faite avant la création de sommets ce qui semble raisonnable. Cependant, je suis incapable de le faire en essayant d'utiliser buildMixedIndex comme il me lancer

    exception argument illégal: back-end d'index externe inconnu recherche

Mon approche était

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') 

Où est-ce que je me trompe?

Répondre

4
  1. Si cette requête prend beaucoup de temps, le problème est probable qu'il visite trop d'éléments ou il est coincé dans une boucle infinie. Les index JanusGraph/Titan existants ne vont pas aider pour cela. Vous avez déjà une recherche de vertex directe par ID, g.V(vertexId), et le reste de la requête traverse le voisinage à partir de ce sommet. Je suggère d'utiliser des étiquettes de bord, c'est-à-dire out('friends'), pour limiter le nombre d'arêtes que vous visitez. Vous pouvez également utiliser simplePath() pour éliminer les chemins cycliques. Vous pouvez également utiliser times() ou until() pour maintenir une limite sur le nombre de fois que vous en boucle à l'étape repeat().

  2. L'exemple de configuration vous avez fait référence uniquement des index utilisés composites, qui ne nécessitent pas d'arrière-plan d'indexation.

Mixed indexes nécessitent la configuration d'un back-end d'indexation, soit ElasticSearch, Lucene, Solr ou. Choisissez l'une d'entre elles, puis assurez-vous de transmettre les propriétés de configuration correctes lorsque vous initialisez votre graphique. Vous pouvez trouver plusieurs exemples dans le fichier zip de distribution dans le répertoire conf. Par exemple, dans le janusgraph-cassandra-es.properties, vous trouverez:

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

search dans index.X.backend est le nom de configuration d'index choisi, vous devez passer à buildMixedIndex(X).

+0

mise à jour réponse pour cette –

0

Voici an answer. Les index composite et mixte ne sont disponibles que pour la requête gremlin de premier niveau, pas pour le second niveau. L'index Vertex-Centric est requis pour la requête de second niveau.