如何从OCompositeKey中省略键?

时间:2016-08-04 17:10:45

标签: orientdb

我为属性创建了一个边索引(out:Link,in:Link,type:String)

我想通过以下方式查询索引而不指定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

2 个答案:

答案 0 :(得分:1)

您使用哈希索引,因此提供的方法是正确的。但是,如果您将使用基于树的索引并使用嵌入式数据库,则可以使用没有类型的复合键,但有点棘手。你应该调用

而不是调用getEdges函数

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

然后对结果调用中的每条记录graph.getEdge(record)

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

答案 1 :(得分: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()));

希望它有所帮助。