OrientDB Gremlin - 为gremlin中的类检索顶点而不是命中索引

时间:2016-02-17 04:20:12

标签: orientdb gremlin rexster orientdb-2.1

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

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

zipcode.zip_code    DICTIONARY  ["zip_code"]    SBTREE 

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

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

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

使用has('zip_code', '12345')filter {it.zip_code == '12345'}会更好吗?哪一个会创建索引?

如果我必须匹配多个属性以匹配:

,该怎么办?
.has('zip_code', '12345').has('state','NY').has('city','NEW YORK') 

会有'点击索引还是'过滤器{}'?请指教。

1 个答案:

答案 0 :(得分: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中,或者备用_(),按顺序在gremlin中写下更多步骤。

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