边缘和边缘的综合指数物业(tinkerpop / orientDB)

时间:2013-10-14 06:23:18

标签: java graph orientdb tinkerpop

我在OrientDB中有一个图形(使用Tinkerpop堆栈),需要能够非常快速地查找边缘值/属性/字段和边缘输入/输出顶点。

因此,基本上用户需要查找如下:

SELECT from myEdges WHERE inVertex = {VertexIdentity},outVertex = {VertexIdentity},property1 ='xyz'

本质上,它是边缘类的复合索引,具有3个属性:inVertex,outVertex& property1

基本上 - 如果用户已经有2个顶点的VertexIdentity(可能,形式为:#CLUSTER_ID:RECORD_ID) - 以及属性值(在这种情况下,xyz) - 它将允许非常快查找组合中是否已存在组合(如果2个顶点与property1链接) - 不进行遍历。

到目前为止,我找到了以下代码来帮助处理复合索引,但我不知道是否可以在此处包含in / out顶点(对于图形边缘)。

https://github.com/orientechnologies/orientdb/blob/master/tests/src/test/java/com/orientechnologies/orient/test/database/auto/SQLSelectCompositeIndexDirectSearchTest.java

有可能吗?

2 个答案:

答案 0 :(得分:3)

这适用于定义边缘唯一性:

OCommandSQL declareIn= new OCommandSQL();
declareIn.setText("CREATE PROPERTY E.in LINK");
OCommandSQL declareOut= new OCommandSQL();
declareOut.setText("CREATE PROPERTY E.out LINK");
OCommandSQL createIndexUniqueEdge= new OCommandSQL();
createIndexUniqueEdge.setText("CREATE INDEX unique_edge ON E (in, out) UNIQUE");
graph.command(declareIn).execute();
graph.command(declareOut).execute();               
graph.command(createIndexUniqueEdge).execute();

在这种情况下,只需将另一个属性添加到Edge类,然后添加到索引

答案 1 :(得分:1)

您可以使用OrientDB执行此操作,只需针对输入和输出属性创建复合索引(在之前的E类中声明它们)。

这也用作约束,以避免多个边连接相同的顶点。