TitanDB 定义和使用索引

TitanDB Defining and Using Indexes

使用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 使用索引来加快查找速度?

您的索引定义看起来很合理,但有几个原因可能导致您应该检查未使用索引。

索引必须完成构建。

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

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

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

请注意,后一个操作应在事务内完成。

所以我设法弄清楚了这个问题。感谢 this answer 提供更多信息。

问题是我假设我会使用 CompositeIndex 但在仔细阅读 Chapter 20, Chapter 22, and Chapter 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");

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