TitanDB定义和使用索引

时间:2015-11-24 20:06:32

标签: java titan tinkerpop

使用this。我正构建以下索引:

TitanManagement management = graph.openManagement();

PropertyKey key = management.makePropertyKey("ITEM_IDENTIFIER").dataType(String.class).make();

management.buildIndex("byItemIdentifier", Vertex.class).addKey(key).buildCompositeIndex();

management.commit();

但是当我运行以下查询时:

graph.traversal().V().has("ITEM_IDENTIFIER", "Test");

我仍然收到警告:

Query requires iterating over all vertices [(ITEM_IDENTIFIER = Test)]. For better performance, use indexes

如何让TitanDB使用索引来加速查找?

2 个答案:

答案 0 :(得分:3)

所以我设法找出问题所在。感谢this answer提供更多信息。

问题在于我假设我会使用CompositeIndex,但在仔细阅读Chapter 20Chapter 22Chapter 28后,我确实错了。基于String的索引需要MixedIndex

要让MisedIndexes使用字符串,我必须首先安装Elasticsearch以启用基于String的索引。然后我可以通过替换:

来配置我的索引
management.buildIndex("byItemIdentifier", Vertex.class).addKey(key).buildCompositeIndex();

management.buildIndex("byItemIdentifier", Vertex.class).addKey(key, Mapping.STRING.asParameter()).buildMixedIndex("search");

这样做后警告消失了。我将进行更多测试以确认这是有效的,但是现在这似乎解决了我的问题。

答案 1 :(得分:1)

您的索引定义看起来很合理,但有几个原因可能无法使用索引。

索引必须完成构建。

mgmt.awaitGraphIndexStatus(graph, "byItemIdentifier").call()

或者您需要重新索引现有数据

mgmt.updateIndex(mgmt.getGraphIndex("byItemIdentifier"), SchemaAction.REINDEX).get()

请注意,后一项操作应在交易中完成。