使用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使用索引来加速查找?
答案 0 :(得分:3)
所以我设法找出问题所在。感谢this answer提供更多信息。
问题在于我假设我会使用CompositeIndex
,但在仔细阅读Chapter 20,Chapter 22和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");
这样做后警告消失了。我将进行更多测试以确认这是有效的,但是现在这似乎解决了我的问题。
答案 1 :(得分:1)
您的索引定义看起来很合理,但有几个原因可能无法使用索引。
索引必须完成构建。
mgmt.awaitGraphIndexStatus(graph, "byItemIdentifier").call()
或者您需要重新索引现有数据
mgmt.updateIndex(mgmt.getGraphIndex("byItemIdentifier"), SchemaAction.REINDEX).get()
请注意,后一项操作应在交易中完成。