我正在使用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')
会有'点击索引还是'过滤器{}'?请指教。
答案 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的新产品(已经掌握了它的查询和支持)时很难。