TitanDB不使用索引进行查询

时间:2015-10-23 13:08:49

标签: indexing titan

我在两个属性上创建了索引:

mgmt.buildIndex("userId", Vertex.class).addKey(mgmt.makePropertyKey("userId").dataType(Integer.class).make()).buildCompositeIndex();

mgmt.buildIndex("firstNameIndex", Vertex.class).addKey(mgmt.makePropertyKey("firstName").dataType(String.class).make()).buildCompositeIndex();

在Gremlin shell上,我可以看到已经创建了索引:

g.getIndexedKeys(Vertex.class)
==>userId
==>firstName

现在,当我如此查询最简单的顶点:

gremlin> g.V()
18:33:42 WARN  com.thinkaurelius.titan.graphdb.transaction.StandardTitanTx  - Query requires iterating over all vertices [()]. For better performance, use indexes
==>v[512]
==>v[256]

或者一些复杂的:

gremlin> g.V.has('firstName' ,CONTAINS,'Raj')
18:36:00 WARN  com.thinkaurelius.titan.graphdb.transaction.StandardTitanTx  - Query requires iterating over all vertices [(firstName CONTAINS Raj)]. For better performance, use indexes
==>v[512]

为什么它不使用索引进行查询。??

创建索引和键索引之间有什么区别吗? 任何解释都会有所帮助。

由于

1 个答案:

答案 0 :(得分:3)

基于http://s3.thinkaurelius.com/docs/titan/1.0.0/indexes.html#index-mixed

  

使用复合索引进行精确匹配索引检索。综合   索引不需要配置或操作外部索引   系统并且通常比混合索引快得多。

     

作为例外,在数字时使用混合索引进行精确匹配   查询约束的不同值的相对较小或者如果是一个   值预计与图中的许多元素相关联   (即在选择性低的情况下)。使用混合索引作为数字   范围,全文或地理空间索引。另外,使用混合索引   可以加快order()。by()查询。

在您的情况下,您似乎正在进行全文搜索,您需要使用混合索引,因为复合索引仅用于完全匹配。

您可以在http://s3.thinkaurelius.com/docs/titan/1.0.0/index-parameters.html#_full_text_search

中找到有关全文搜索索引的更多信息

我没有看到指数和关键指数之间存在任何差异。以顶点为中心的索引与属性/关键索引不同。看看我提供的链接。希望这有帮助!