2016-04-02 7 views
0

Also, wenn ich den Scheitelpunkt abrufen möchten, die den maximalen Wert eines Lang Eigenschaft hat, sollte ich laufen:Titan: Wie erreicht man den maximalen Wert einer Long-Eigenschaft?

graph.traversal().V().has("type","myType").values("myProperty").max().next() 

Das ist wirklich langsam, wie es alle Knoten zu laden hat den Maximalwert zu ermitteln. Gibt es einen Weg schneller?

Jede Indizierung würde helfen? Ich glaube, zusammengesetzte Indizes werden nicht helfen, aber gibt es eine Möglichkeit, es mit gemischten Index mit ElasticSearch Backend zu tun?

Antwort

3

Wenn Sie Titan verwenden, um einen gemischten Index für einen numerischen Wert zu erstellen, wird Elasticsearch die Eigenschaft korrekt indizieren. Art ähnlich wie Sie, wollen wir alle unsere Eckpunkte durch eine Eigenschaft DEGREE von max bestellt kennen min so zur Zeit wir die folgenden für die Eigenschaft DEGREE:

TitanGraph titanGraph = TitanFactory.open("titan-cassandra-es.properties"); 
TitanManagement management = graph.openManagement(); 

PropertyKey degreeKey = management.makePropertyKey("DEGREE").dataType(Long.class).make(); 

management.buildIndex("byDegree", Vertex.class) 
.addKey(degreeKey) 
.buildMixedIndex("search"); 

Wir haben derzeit Probleme haben Titan immer diese zu durchqueren schnell (aus irgendeinem Grunde kann es den Index erstellen, sondern kämpft sie für bestimmte Abfragen verwenden), aber sie Elasticsearch direkt abfragen können:

curl -XGET 'localhost:9200/titan/byDegree/_search?size=80' -d ' 
{ 
    "sort" : [ 
     { "DEGREE" : {"order" : "desc"}} 
    ], 
    "query" : { 

    } 
} 

die Antwort extrem schnell vorerst zurückgeführt wird, so dass wir den Index mit Titan erstellen aber elastische Suche abfragen direkt.

Kurze Antwort: Elasticsearch kann sehr einfach mit numerischen Bereichen arbeiten, das Problem auf unserer Seite scheint zumindest Titan zu bekommen, diese Indizes vollständig zu verwenden. Allerdings ist die Traversierung, die Sie ausführen möchten, einfacher als die unsere (Sie wollen nur die Max), so dass Sie diese Probleme möglicherweise nicht auftreten und Sie können nur in der Lage sein, mit Titan-Traversalen voll zu bleiben.

Edit:

Ich habe kürzlich bestätigt, dass Elasticsearch und titan Ihre Bedürfnisse erfüllen kann (wie es mein Fall ist). Seien Sie vorsichtig, wie Sie Ihre Indizes erstellen. Titan kann Ihre Abfrage schnell ausführen, solange Sie Ihren gemischten Index mit dem Schlüssel Type erstellen, der auf String entspricht, nicht auf Text Match.

+0

vielen Dank. Das ist wirklich gut, aber zu komplex. Hoffentlich würde solch ein Zusatz zu Gremlin in zukünftigen Versionen hinzugefügt werden. –

+0

Ich habe es komplizierter klingen lassen, als es ist, weil ich zur Zeit der Antwort noch selbst studierte. Der Prozess von Titan's Ende ist eigentlich wirklich einfach. Ich würde empfehlen, Mixed Indices auszuprobieren –

Verwandte Themen