我一直在关注管理系统,但有些事情仍然无法实现。基本上我想做的是:
- 列出所有基于Edge的索引(包括以顶点为中心)。
- 列出所有基于顶点的索引(如果索引附加到标签,则基于每个标签)。
它基本上就像映射图模式一样。
我尝试了一些东西,但我最多只得到部分数据。
g.getIndexdKeys(<Vertex or Edge>);
//basic information. Doesn't seem to return any buildEdgeIndex() based indexes
mgmt.getVertexLabels();
// gets labels, can't find a way of getting indexes attached to these labels.
mgmt.getGraphIndexes(Vertex.class);
// works nicely I can retrieve Vertex indexes and get pretty much any
// information I want out of them except for information regarding
// indexOnly(label). So I can't tell what label these indexes are attached to.
mgmt.getGraphIndexes(Edge.class);
// doesn't seem to return any buildEdgeIndex() indexes.
填补空白的任何帮助都会有所帮助。
我想知道:
- 如何通过indexOnly()找到附加到标签(或附加到索引的标签)的索引
- 如何列出通过buildEdgeIndex()设置的边缘索引及其各自的边缘标签?
提前致谢。
额外的信息:
Titan 0.5.0,Cassandra后端,通过rexster。
它不是很直接,所以我将用一个例子来展示它。
让我们从神的图表开始+神名的另一个索引:
g = TitanFactory.open("conf/titan-cassandra-es.properties")
GraphOfTheGodsFactory.load(g)
m = g.getManagementSystem()
name = m.getPropertyKey("name")
god = m.getVertexLabel("god")
m.buildIndex("god-name", Vertex.class).addKey(name).unique().indexOnly(god).buildCompositeIndex()
m.commit()
现在让我们再次拉出索引信息。
gremlin> m = g.getManagementSystem()
==>com.thinkaurelius.titan.graphdb.database.management.ManagementSystem@2f414e82
gremlin> // get the index by its name
gremlin> index = m.getGraphIndex("god-name")
==>com.thinkaurelius.titan.graphdb.database.management.TitanGraphIndexWrapper@e4f5395
gremlin> // determine which properties are covered by this index
gremlin> gn.getFieldKeys()
==>name
//
// the following part shows what you're looking for
//
gremlin> import static com.thinkaurelius.titan.graphdb.types.TypeDefinitionCategory.*
gremlin> // get the schema vertex for the index
gremlin> sv = m.getSchemaVertex(index)
==>god-name
gremlin> // get index constraints
gremlin> rel = sv.getRelated(INDEX_SCHEMA_CONSTRAINT, Direction.OUT)
==>com.thinkaurelius.titan.graphdb.types.SchemaSource$Entry@5162bf3
gremlin> // get the first constraint; no need to do a .hasNext() check in this
gremlin> // example, since we know that we will only get a single entry
gremlin> sse = rel.iterator().next()
==>com.thinkaurelius.titan.graphdb.types.SchemaSource$Entry@5162bf3
gremlin> // finally get the schema type (that's the vertex label that's used in .indexOnly())
gremlin> sse.getSchemaType()
==>god
干杯,
丹尼尔
它不是很直接,所以我将用一个例子来展示它。
让我们从神的图表开始+神名的另一个索引:
g = TitanFactory.open("conf/titan-cassandra-es.properties")
GraphOfTheGodsFactory.load(g)
m = g.getManagementSystem()
name = m.getPropertyKey("name")
god = m.getVertexLabel("god")
m.buildIndex("god-name", Vertex.class).addKey(name).unique().indexOnly(god).buildCompositeIndex()
m.commit()
现在让我们再次拉出索引信息。
gremlin> m = g.getManagementSystem()
==>com.thinkaurelius.titan.graphdb.database.management.ManagementSystem@2f414e82
gremlin> // get the index by its name
gremlin> index = m.getGraphIndex("god-name")
==>com.thinkaurelius.titan.graphdb.database.management.TitanGraphIndexWrapper@e4f5395
gremlin> // determine which properties are covered by this index
gremlin> gn.getFieldKeys()
==>name
//
// the following part shows what you're looking for
//
gremlin> import static com.thinkaurelius.titan.graphdb.types.TypeDefinitionCategory.*
gremlin> // get the schema vertex for the index
gremlin> sv = m.getSchemaVertex(index)
==>god-name
gremlin> // get index constraints
gremlin> rel = sv.getRelated(INDEX_SCHEMA_CONSTRAINT, Direction.OUT)
==>com.thinkaurelius.titan.graphdb.types.SchemaSource$Entry@5162bf3
gremlin> // get the first constraint; no need to do a .hasNext() check in this
gremlin> // example, since we know that we will only get a single entry
gremlin> sse = rel.iterator().next()
==>com.thinkaurelius.titan.graphdb.types.SchemaSource$Entry@5162bf3
gremlin> // finally get the schema type (that's the vertex label that's used in .indexOnly())
gremlin> sse.getSchemaType()
==>god
干杯,
丹尼尔