在 Titan 中使用 order().by() 时索引不起作用
Index does not work when using order().by() in Titan
Mixed indexes support ordering natively and efficiently. However, the property key used in the order().by() method must have been previously added to the mixed indexed for native result ordering support. This is important in cases where the the order().by() key is different from the query keys. If the property key is not part of the index, then sorting requires loading all results into memory.
所以,我在prop1
属性上做了一个混合索引。 prop1
上的混合索引在指定值时运行良好。
gremlin> g.V().has('prop1', gt(1)) /* this gremlin uses the mixed index */
==>v[6017120]
==>v[4907104]
==>v[8667232]
==>v[3854400]
...
但是,当我在 prop1
上使用 order().by()
时,我无法利用混合索引。
gremlin> g.V().order().by('prop1', incr) /* doesn't use the mixed index */
17:46:00 WARN com.thinkaurelius.titan.graphdb.transaction.StandardTitanTx - Query requires iterating over all vertices [()]. For better performance, use indexes
Could not execute query since pre-sorting requires fetching more than 1000000 elements. Consider rewriting the query to exploit sort orders
还有count()
这么久。
gremlin> g.V().has('prop1').count()
17:44:47 WARN com.thinkaurelius.titan.graphdb.transaction.StandardTitanTx - Query requires iterating over all vertices [()]. For better performance, use indexes
如果我知道我有什么问题,我会很高兴。这是我的泰坦信息:
- 泰坦版本:1.0.0-hadoop1
- 存储后端:Cassandra 2.1.1
- 索引后端:ElasticSearch 1.7
谢谢。
您必须提供一个值以过滤要使用的索引。这里:
g.V().order().by('prop1', incr)
您没有提供任何过滤器,因此 Titan 必须迭代所有 V()
然后应用排序。
这里:
g.V().has('prop1').count()
您提供了一个索引键,但没有指定要过滤的值,因此它仍在迭代所有 V()
。你可以这样做:
g.V().has("prop1", textRegex(".*")).count()
在这种情况下,您可以稍微伪造一下 Titan,但是如果该查询 returns 有很多结果需要迭代,那么查询仍然会很慢。
Mixed indexes support ordering natively and efficiently. However, the property key used in the order().by() method must have been previously added to the mixed indexed for native result ordering support. This is important in cases where the the order().by() key is different from the query keys. If the property key is not part of the index, then sorting requires loading all results into memory.
所以,我在prop1
属性上做了一个混合索引。 prop1
上的混合索引在指定值时运行良好。
gremlin> g.V().has('prop1', gt(1)) /* this gremlin uses the mixed index */
==>v[6017120]
==>v[4907104]
==>v[8667232]
==>v[3854400]
...
但是,当我在 prop1
上使用 order().by()
时,我无法利用混合索引。
gremlin> g.V().order().by('prop1', incr) /* doesn't use the mixed index */
17:46:00 WARN com.thinkaurelius.titan.graphdb.transaction.StandardTitanTx - Query requires iterating over all vertices [()]. For better performance, use indexes
Could not execute query since pre-sorting requires fetching more than 1000000 elements. Consider rewriting the query to exploit sort orders
还有count()
这么久。
gremlin> g.V().has('prop1').count()
17:44:47 WARN com.thinkaurelius.titan.graphdb.transaction.StandardTitanTx - Query requires iterating over all vertices [()]. For better performance, use indexes
如果我知道我有什么问题,我会很高兴。这是我的泰坦信息:
- 泰坦版本:1.0.0-hadoop1
- 存储后端:Cassandra 2.1.1
- 索引后端:ElasticSearch 1.7
谢谢。
您必须提供一个值以过滤要使用的索引。这里:
g.V().order().by('prop1', incr)
您没有提供任何过滤器,因此 Titan 必须迭代所有 V()
然后应用排序。
这里:
g.V().has('prop1').count()
您提供了一个索引键,但没有指定要过滤的值,因此它仍在迭代所有 V()
。你可以这样做:
g.V().has("prop1", textRegex(".*")).count()
在这种情况下,您可以稍微伪造一下 Titan,但是如果该查询 returns 有很多结果需要迭代,那么查询仍然会很慢。