【问题标题】:What is the best way to perform index ranged searches in OrientDB from Java?从 Java 在 OrientDB 中执行索引范围搜索的最佳方法是什么?
【发布时间】:2014-07-18 20:53:27
【问题描述】:

我们在嵌入式模式下使用 OrientDB,并希望通过 Java api 调用直接访问它(不使用 SQL-ish 语言)。我们有一个索引,需要对其执行范围搜索。这是迄今为止我找到的唯一方法:

String startAt = createInternalOIndexSearchableKey(actualKey);
Index<Edge> index = graph.getIndex(indexName, Edge.class);
OrientIndex orientIndex = (OrientIndex) index;
OIndex oIndex = orientIndex.getUnderlying();
boolean INCLUSIVE = true;
boolean ASCENDING = true;
OIndexCursor cursor = oIndex.iterateEntriesMajor(startAt, INCLUSIVE, ASCENDING);
while(cursor.hasNext())
{
    Entry<Object, OIdentifiable> entry = cursor.nextEntry();
    ...process the entry here

偏离正常的公共 API 这么远感觉不舒服。特别是createInternalOIndexSearchableKey的实现:

private String createInternalOIndexSearchableKey(String actualKey) 
{
    // NOTE: Keys passed to OIndex.iterateEntriesMajor must 
    // be in the (undocumented) format: EdgeLabel!=!ActualKey
    return KEY_CAN_DOWNLOAD_PUBCODETIMESTAMP + "!=!" + actualKey;
}

有没有更好的方法来做到这一点?

【问题讨论】:

    标签: java orientdb tinkerpop


    【解决方案1】:

    OIndexOIndexCursor 是 Document 数据库的公共 api,不用担心,你可以使用它。 但是API的主要目的是为SQL引擎和其他内部组件提供灵活性,所以不是很方便。

    我建议你使用 sql 查询,它们提供相同级别的灵活性和更紧凑,使它们的使用更方便。

    【讨论】:

    • 感谢您的回复。我真的不喜欢在我的 java 代码中乱用 SQL 字符串,所以本地解决方案将是理想的。但我会记住你的建议。 (我会赞成你的回答,但我还没有足够的声誉)。
    猜你喜欢
    • 2016-08-21
    • 1970-01-01
    • 2013-01-08
    • 1970-01-01
    • 1970-01-01
    • 2018-06-07
    • 2010-11-15
    • 2021-08-17
    • 1970-01-01
    相关资源
    最近更新 更多