2016-08-04 92 views
0

我创建的边缘索引属性(下:链接,在:链接,类型:字符串)如何从OCompositeKey中省略密钥?

我想查询索引,而不经由指定type属性:

Iterable<Edge> edges = noTrx.getEdges("e." + label, new OCompositeKey(vertexA.getId(), vertexB.getId())); 

不幸的是没有元件可以找到,如果我从OCompositeKey省略类型。

有没有办法查询索引并省略type?或者我需要创建一个只包含out和in的专用索引?

完整的示例源:

https://github.com/Jotschi/orientdb-playground/blob/e5bb027df171a04bc87d3b108ee58cc86499b7c3/src/test/java/de/jotschi/orientdb/EdgeIndexTest.java

+0

Hi @Jotschi您正在使用哪个版本? –

+0

版本 - 2.2.4 – Jotschi

回答

1

您使用散列索引,所以提供的方法是正确的。但是,如果您将使用基于树的索引并使用嵌入式数据库,则可以使用不带类型的组合键,但方式有点棘手。而不是调用getEdges的工作,你应该叫

index.iterateEntriesMajor(new OCompositeKey(root.getId(), foundElement.getId()))

,然后在结果呼叫的每条记录graph.getEdge(record)

我注意到,你使用noTX图实现,我不建议使用在noTx实施生产时,可能会导致数据不一致和图形状态不良。

0

你的类HAS_ITEM有两个指标

enter image description here

如果您还想寻找的类型,你必须使用索引e.has_item_type

Iterable<Edge> edges = noTrx.getEdges("e." + label +"_type", new OCompositeKey(root.getId(), foundElement.getId(),type)); 

否则你可以使用索引e.has_item

Iterable<Edge> edges = noTrx.getEdges("e." + label, new OCompositeKey(root.getId(), foundElement.getId())); 

希望它有帮助。

+0

好的,所以我应该使用专用索引。得到它了。那也是我目前的解决方案。 – Jotschi