2015-12-15 35 views
1

The Titan documentation工作由()說:指數不使用順序()時,在土衛六

混合索引支持本地和有效地定購。但是,order()。by()方法中使用的屬性鍵必須先前已添加到混合索引以獲得本機結果排序支持。這在order()。by()鍵與查詢鍵不同的情況下非常重要。如果屬性鍵不是索引的一部分,則排序需要將所有結果加載到內存中。

因此,我做了prop1財產的混合指數。當指定值時,prop1上的混合索引效果很好。

gremlin> g.V().has('prop1', gt(1)) /* this gremlin uses the mixed index */ 
==>v[6017120] 
==>v[4907104] 
==>v[8667232] 
==>v[3854400] 
... 

但是,當我使用prop1order().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
  • 存儲後端:卡桑德拉2.1.1
  • 指數後端:ElasticSearch 1.7

謝謝。

回答

3

您必須提供一個值來篩選要使用的索引。在這裏:

g.V().order().by('prop1', incr) 

你不提供任何過濾器,那麼泰坦遍歷所有的V(),然後應用排序。

這裏:

g.V().has('prop1').count() 

您提供的索引鍵,但不指定值,以過濾所以它仍然是迭代所有的V()。你可以這樣做:

g.V().has("prop1", textRegex(".*")).count() 

在這種情況下,你會假泰坦了一下,但查詢可能仍然緩慢反正如果查詢返回了不少成果遍歷。

+0

非常感謝! –