我有一个Edgelabel
ContainsAttribute
,Multiplicity.SIMPLE
这些边缘也有一个属性,我想把它称为x
,我想要以顶点为中心的索引。
PropertyKey propertyX = mgmt.getPropertyKey("x");
EdgeLabel containsAttributeLabel = mgmt.makeEdgeLabel(EdgeLabels.ContainsAttribute).multiplicity(Multiplicity.SIMPLE).make();
mgmt.buildEdgeIndex(containsAttributeLabel,"propXIndex",Direction.IN, propertyX);
所以边缘代表Entity --containsAttribute --> Attribute
。我尝试进行的查询将尝试通过对属性x
进行过滤来搜索给定查询的实体。
我想知道为什么它不允许我说:
The relation type [ContainsAttribute] has a multiplicity or cardinality constraint in direction [IN] and can therefore not be indexed
我认为我的用例是有道理的,我不想放宽我的边缘标签多样性从SIMPLE
到MANY2ONE
,ONE2MANY
或MULTI
,让它发挥作用。
编辑:根据示例http://s3.thinkaurelius.com/docs/titan/1.0.0/indexes.html赫拉克勒斯与很多怪物作战,所以边缘标记为“#39;被发现出来的大力士'多次连接不同的怪物。然后边缘索引在属性'时间'所以可以进行过滤。我想做类似的事情,我认为以顶点为中心的索引是这样的。那些边是Multiplicity.SIMPLE,因为最多有一个边被标记为' battled'赫拉克勒斯和每个怪物之间。
编辑2:
再次类似于给定的例子,SIMPLE图表:
我相信为赫拉克勒斯提供一个顶点中心索引并且正在进行的SIMPLE'边缘。当从赫拉克勒斯到怪物时,这会使time >=20
之类的查询更快。
我不明白为什么我们必须使用如下所示的MULTI图(不太严格)来利用以顶点为中心的索引。
任何帮助将不胜感激! 谢谢!