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");
这样做之后警告消失了。我将进行更多测试以确认它是否有效,但现在这似乎已经解决了我的问题。
使用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");
这样做之后警告消失了。我将进行更多测试以确认它是否有效,但现在这似乎已经解决了我的问题。