2013-06-15 1 views
6

Я использую Titan Server (Cassandra) v 0.3.1. Я хотел бы создать индекс для вершинного ключа/свойства, который я уже начал использовать. Тем не менее, в их documentation, Titan объясняет:Создать индекс по свойству вершины, который уже существует в Titan (Cassandra)?

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

Если я пытаюсь создать индекс на поле, которое уже существует, я вижу ошибку, как ожидалось:

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

Однако, даже если я попытаться очистить граф, удалив все вершины & края, я вижу ту же ошибку:

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 

Так что, кажется, что my_key сохраняется в т он находится в хранилище данных даже после удаления всех элементов графика. Это согласуется с документами (хотя элементы были удалены, свойство уже было «впервые использовано»), но, похоже, стоило сделать снимок.

Следующим шагом будет повторное создание нового хранилища данных Cassandra, но мне интересно, есть ли лучший вариант.

Что является самым простым способом создания индекса в поле, которое уже было использовано в Titan?

ответ

3

Point Titan в новое хранилище данных Cassandra и создайте индекс перед вставкой любых элементов с этим свойством.

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

Попробуйте Gremlin запрос:

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

Вам не нужно удалять Ребра вручную, потому что если вершина удаляется, все ребра, связанные с ним, будут удалены автоматически. И чтобы удалить все вершины, вам нужно использовать итерационный запрос.

После того, как график будет очищен, вам не понадобится новое KeySpace. Затем вы можете использовать:

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

Спасибо за ваш ответ - к сожалению, это, похоже, не делает этого с этой целью. Я думаю, что 'g.V.each {g.removeVertex (it)}' примерно эквивалентен 'g.V.remove()' ([см. Соответствующий] (http://stackoverflow.com/a/17250723/2172530)). Когда я попробовал альтернативный метод удаления вершин, у Titan была та же жалоба: 'Невозможно добавить индекс к уже существующему ключу свойства: my_key'. – bcm360

+0

Вы совершили транзакцию после удаления? – Pradatta

+0

Я сделал, нет разницы: 'gremlin> g.V.each {g.removeVertex (it)}; g.commit(); g.createKeyIndex ("my_key", Vertex.class); Невозможно добавить индекс уже существующего ключа свойства: my_key' – bcm360

Смежные вопросы