我在两个属性上创建了索引:
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]
为什么它不使用索引进行查询。??
创建索引和键索引之间有什么区别吗? 任何解释都会有所帮助。
由于
答案 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
中找到有关全文搜索索引的更多信息我没有看到指数和关键指数之间存在任何差异。以顶点为中心的索引与属性/关键索引不同。看看我提供的链接。希望这有帮助!