2013-06-15 17 views
6

Sto utilizzando Titan Server (Cassandra) v 0.3.1. Mi piacerebbe creare un indice su una chiave/proprietà di vertice che ho già iniziato a utilizzare. Tuttavia, nella loro documentation, Titan spiega che:Creare un indice su una proprietà vertice che esiste già in Titan (Cassandra)?

To index vertices by key, the respective key index must be created before the key is first used in a vertex property.

Se cerco di creare un indice su un campo che esiste già, vedo un errore come previsto:

gremlin> g.createKeyIndex("my_key",Vertex.class) 
Cannot add an index to an already existing property key: my_key 

Tuttavia, anche se io cercare di cancellare il grafico, eliminando tutti i vertici & bordi, vedo lo stesso errore:

gremlin> g.E.remove() 
==>null 
gremlin> g.V.remove() 
==>null 
gremlin> g.createKeyIndex("my_key",Vertex.class) 
Cannot add an index to an already existing property key: my_key 

Così sembra che my_key persiste in t l'archivio dati sottostante anche dopo che tutti gli elementi del grafico sono stati rimossi. Questo è coerente con i documenti (anche se gli elementi sono stati cancellati, la proprietà è già stata "utilizzata per la prima volta"), ma sembra valsa la pena provare.

Il mio prossimo passo sarà ricreare completamente un nuovo archivio dati Cassandra, ma mi chiedo se c'è un'opzione migliore.

Qual è il modo più semplice per creare un indice su un campo che è già stato utilizzato in Titan?

risposta

3

Punto Titan in un nuovo archivio dati Cassandra e creare l'indice prima di inserire qualsiasi elemento con quella proprietà.

gremlin> g.createKeyIndex("my_key",Vertex.class) 
==>null 
3

Prova questa ricerca gremlin:

gremlin> g.V.each{g.removeVertex(it)} 

Non è necessario rimuovere manualmente Bordi, perché se un vertice viene rimosso, tutti i bordi ad esso associati saranno rimossi automaticamente. E per rimuovere tutti i vertici è necessario utilizzare una query iterativa.

Una volta cancellato il grafico, non sarà necessario un nuovo KeySpace. È quindi possibile utilizzare:

gremlin> g.createKeyIndex("my_key",Vertex.class) 
+0

Grazie per la risposta-- sfortunatamente, non sembra farlo a tal fine. Penso che g.V.each {g.removeVertex (it)} 'sia approssimativamente equivalente a' g.V.remove() '([vedi related] (http://stackoverflow.com/a/17250723/2172530)). Quando ho provato il tuo metodo alternativo per rimuovere i vertici, Titan ha avuto lo stesso reclamo: "Impossibile aggiungere un indice a una chiave di proprietà già esistente: my_key'. – bcm360

+0

Hai effettuato il commit della transazione dopo la rimozione? – Pradatta

+0

Ho fatto, nessuna differenza: 'gremlin> g.V.each {g.removeVertex (it)}; g.commit(); g.createKeyIndex ("my_key", Vertex.class); Impossibile aggiungere un indice a una chiave di proprietà già esistente: my_key' – bcm360