2016-07-10 36 views
0

Ich benutze Titan 1.0.0 mit Cassandra Backend und elasticsearch als Index. Ich habe Benutzerscheitelpunkte mit konfigurierten Eigenschaften (userId, email, fullName ... usw.). Einige dieser Eigenschaften sind in elasticsearch als gemischter Index konfiguriert. Jetzt möchte ich eine existierte Eigenschaft hinzufügen (zB eine zuvor konfigurierten Eigenschaft, die nicht zuvor in der gemischten Index aufgenommen wurde) an den Mischindex mit:Title 1.0.0 Mixed Index kann nicht neu indiziert werden, nachdem eine existierende Eigenschaft hinzugefügt wurde

TitanManagement tm = graph.openManagement(); 
tm.addIndexKey(tm.getGraphIndex("users"), tm.getPropertyKey("age")); 
tm.commit(); 

Von nun zusätzlich „Alter“ Immobilien-Mapping ist Hinzugefügt zum Elasticsearch. Jedes Update der "Alter" Eigenschaft eines Benutzerscheitelpunktes fügt ein "Alter" Feld zu dem Elasticserch-Dokument hinzu. Um diesen Index jedoch korrekt in Titan-Abfragen zu verwenden, muss ich meinen gemischten Graph-Index neu indizieren. An diesem Punkt beginnt mein Problem. Bezogen auf Titan Dokumentation, muss ich die folgenden Schritte tun (mit Gremlin):

import com.thinkaurelius.titan.graphdb.database.management.ManagementSystem 

// Rollback or commit transactions on the graph which predate the index definition 
graph.tx().rollback() 

// Block until the SchemaStatus transitions from INSTALLED to REGISTERED 
ManagementSystem.awaitGraphIndexStatus(graph, "users") 
    .status(SchemaStatus.REGISTERED) 
    .timeout(10, ChronoUnit.MINUTES) // set timeout to 10 
    .call() 

Nach 10 Minuten Timeout die Antwort, die empfangen wurde:

==>GraphIndexStatusReport[success=false, indexName='users', targetStatus=REGISTERED, 
    notConverged={age=INSTALLED, fullName=ENABLED, userId=ENABLED, 
    userRegisterDate=ENABLED, userGender=ENABLED, email=ENABLED}, 
    converged={}, elapsed=PT10M0.173S] 

Und jetzt, wenn ich versuche, so indizieren folgt:

WARN com.thinkaurelius.titan.graphdb.olap.job.IndexRepairJob - Index users has key age in an invalid status INSTALLED 
ERROR com.thinkaurelius.titan.diskstorage.keycolumnvalue.scan.StandardScannerExecutor - Exception trying to setup the job: 
com.thinkaurelius.titan.core.TitanException: The index users is in an invalid state and cannot be indexed. The following index keys have invalid status: age has status INSTALLED (status must be one of [REGISTERED, ENABLED]) 
:
tm = graph.openManagement() 
tm.updateIndex(tm.getGraphIndex("users"), SchemaAction.REINDEX).get() 
tm.commit() 

ich den Fehler

erhalten 210

Irgendwelche Ideen, was ich falsch mache?

+0

Können Sie versuchen, den Aufruf von '.get()' nach 'tm.updateIndex (tm.getGraphIndex (" users "), SchemaAction.REINDEX) zu ketten? Sie haben diesen Teil aus dem Beispiel in der Dokumentation verpasst. – jbmusso

+0

@jbmusso ja, habe ich versucht mit '.get()' Methodenaufruf. Einfach kopieren/einfügen, meine Fragen bearbeiten. – OctopusSD

Antwort

0

Sie können einem vorhandenen Index keine neue Eigenschaft hinzufügen. Überprüfen Sie docs.

+0

Laut der Dokumentation von Titan v1.0.0 [dies kann für gemischten Index getan werden] (http://s3.thinkaurelius.com/docs/titan/1.0.0/indexes.html#index-mixed). – jbmusso

+0

Wo? Könnten Sie bitte den Abschnitt angeben, der besagt, dass Sie einem vorhandenen gemischten Index eine neue Eigenschaft hinzufügen können? –

+0

@MTA überprüfen Sie bitte in Abschnitt [8.1.2.1] (http://s3.thinkaurelius.com/docs/titan/1.0.0/indexes.html#_adding_property_keys) der Titan 1.0.0 Dokumentation: "_Ist der Property Key bereits verwendet, erfordert das Hinzufügen eines Schlüssels die Ausführung einer ** Reindex-Prozedur **, um sicherzustellen, dass der Index alle zuvor hinzugefügten Elemente enthält._ " – OctopusSD