2013-06-15 9 views
6

Używam serwera Titan (Cassandra) v 0.3.1. Chciałbym utworzyć indeks na klucz/właściwość wierzchołków, które już zacząłem używać. Jednak w ich documentation Titan wyjaśnia, że:Utwórz indeks we właściwości wierzchołków, która już istnieje w Tytanie (Cassandra)?

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

Gdy próbuję utworzyć indeks na polu, który już istnieje, widzę błąd, zgodnie z oczekiwaniami:

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

Jednakże, nawet jeśli spróbuj usunąć wykres usuwając wszystkie wierzchołki & brzegi, widzę ten sam błąd:

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 

więc wydaje się, że w dalszym ciągu t my_key z magazynu danych, nawet po usunięciu wszystkich elementów wykresu. Jest to zgodne z dokumentami (mimo że elementy zostały usunięte, właściwość była już "po raz pierwszy użyta"), ale wydawało się warte strzału.

Moim następnym krokiem będzie ponowne stworzenie nowego magazynu danych Cassandra, ale zastanawiam się, czy istnieje lepsza opcja.

Jaki jest najprostszy sposób utworzenia indeksu na polu, które już było używane w programie Titan?

Odpowiedz

3

Wskaż Titanowi nowy magazyn danych Cassandra i utwórz indeks przed wstawieniem elementów z tą właściwością.

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

Spróbuj zapytanie gremlin:

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

Nie trzeba usunąć ręcznie krawędzie, ponieważ jeśli wierzchołek jest usuwany, wszystkie krawędzie z nim związane będą usuwane automatycznie. Aby usunąć wszystkie wierzchołki, musisz użyć zapytania iteracyjnego.

Po wykasowaniu wykresu nie potrzebujesz nowego KeySpace. Możesz następnie użyć:

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

Dzięki za odpowiedź - niestety, nie wydaje się, aby to zrobić w tym celu. Myślę, że 'g.V.each {g.removeVertex (it)} jest mniej więcej równoznaczne z' g.V.remove() '([zobacz powiązane] (http://stackoverflow.com/a/17250723/2172530)). Kiedy próbowałem twojej alternatywnej metody usuwania wierzchołków, Titan miał tę samą skargę: 'Nie można dodać indeksu do już istniejącego klucza własności: my_key'. – bcm360

+0

Czy zatwierdziłeś transakcję po usunięciu? – Pradatta

+0

Zrobiłem, bez różnicy: 'gremlin> g.V.each {g.removeVertex (it)}; g.commit(); g.createKeyIndex ("my_key", Vertex.class); Nie można dodać indeksu do już istniejącego klucza właściwości: my_key' – bcm360

Powiązane problemy