OrientDB Gremlin - 在 gremlin 中检索 class 的顶点未命中索引

OrientDB Gremlin - Retrieve Vertex for a class in gremlin not hitting indexes

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

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

zipcode.zip_code    DICTIONARY  ["zip_code"]    SBTREE 

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

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

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

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

如果我必须匹配 1 个以上的属性来匹配:

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

会有'命中指数还是'filter{}'?请指教

好的,经过一些尝试和尝试,我能够通过 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' 符号(这是命中索引所必需的)但是它 returns 是一个迭代器而不是管道所以我必须把它放在 GremlinPipeline 中,或者备用 _(),以便在 gremlin 中编写进一步的步骤。

希望这对其他人也有帮助。让我燃烧了 2 天,当你真的试图从 neo4j(已经掌握了它的查询和支持)中获得新产品时,这很难。