在Titan(Cassandra)中创建一个已存在的顶点属性上的索引?

6
我正在使用Titan Server (Cassandra) v 0.3.1。我想在已经开始使用的顶点键/属性上创建索引。然而,在他们的文档中,Titan解释道:
“要通过键对顶点进行索引,必须在键首次用于顶点属性之前创建相应的键索引。”
如果我尝试在已经存在的字段上创建索引,我会看到预期的错误。
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中创建索引的最简单方法是什么?
2个回答

3

尝试使用这个Gremlin查询:

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

无需手动删除边,因为如果移除一个顶点,则与其相关的所有边将自动移除。要移除所有顶点,需要使用迭代查询。

一旦图表已清除,您将不需要新的Keyspace。然后可以使用:

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

感谢您的回答 - 不幸的是,在这一端似乎行不通。我认为g.V.each {g.removeVertex(it)}大致相当于g.V.remove()请参见相关)。当我尝试使用您的替代方法删除顶点时,Titan也出现了同样的问题:“无法将索引添加到已存在的属性键:my_key”。 - bcm360
你在移除后提交了事务吗? - Pradatta
我执行了这段代码,但没有任何变化: gremlin> g.V.each{g.removeVertex(it)}; g.commit(); g.createKeyIndex("my_key", Vertex.class); 无法为已存在的属性键添加索引:my_key - bcm360

3
将Titan指向一个新的Cassandra数据存储,并在插入任何具有该属性的元素之前创建索引。
gremlin> g.createKeyIndex("my_key",Vertex.class)
==>null

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接