2

我正在使用 OrientDB 2.1.11 和 rexster 2.6,而 gremlin 是主要的查询语言。我通过 rexpro(和 rexster REST)使用。我的问题是:如何从 gremlin 中获取索引(我必须使用 gremlin 而不是 orient sql)。

我有一个顶点类邮政编码,它在模式中定义了 1 个属性 zip_code 并索引为字典:

zipcode.zip_code    DICTIONARY  ["zip_code"]    SBTREE 

但是当我使用 gremlin 查询它时,当记录大约 > 25k 时它很慢(没有用较低的数字进行测试)。为了给出正确的上下文,我首先尝试找到邮政编码,如果它不存在,那么我创建顶点以供以后使用。查找查询是这样的:

g.V('@class', 'zipcode').has('zip_code','10018')

问题:gV('@class'... 是否命中索引?它不会超过 1000000 个 V 对象吗?有没有办法更好地编写它以提高我的顶点类的效率,即邮政编码?我只需要匹配一个我的类中顶点的属性(邮政编码)。

是使用has('zip_code', '12345')还是更好filter {it.zip_code == '12345'}?哪个会命中创建的索引?

如果我必须匹配超过 1 个属性以匹配:

.has('zip_code', '12345').has('state','NY').has('city','NEW YORK') 

会有'命中索引或'filter{}'?请指教。

4

1 回答 1

0

好的,经过一番尝试和尝试,我能够通过 rexster/gremlin 解决这个问题。我将查询更改为:

new GremlinPipeline(g.getVertices('city_state.city','PALMETTO')).has('state_code','FL')

或者
g.getVertices('city_state.city','PALMETTO')._().has('state_code','FL')

g.getVertices 方法确实接受 'class.field' 表示法(这是命中索引所必需的),但它返回一个迭代器而不是管道,所以我必须将它放在 GremlinPipeline 或备用 _() 中,以便进一步编写步入小鬼。

希望这也能帮助其他人。让我烧了 2 天,当您真正尝试购买来自 neo4j 的新产品时(它已经掌握了它的查询和支持),这很难。

于 2016-02-21T08:30:12.413 回答