使用 Titan 或 TinkPop Java api 查找 vertex/node

Find vertex/node using Titan or TinkPop Java api

我正在试验 Titan 图形数据库。我对 Neo4j 有一点经验。在 Neo4j 中,有一个非常方便的 api 用于查询具有特定标签和 属性 值的 vertex/node。 在 Neo4j 中:

Node node = graph.findNode(label, propertyName, propertyValue);

当然,创建索引是为了加快这个查找过程。

在 Titan 中,我使用

创建索引
TitanGraphIndex personIdIndex = titanManagement.buildIndex("personId", Vertex.class).addKey(personId).indexOnly(personLabel).unique().buildCompositeIndex();

现在我想 find/query 为带有 personLabel 和特定 personId 的顶点。我该怎么做?在 Titan 或 TinkerPop 中是否有等效的 Java API 来执行此操作?

建立索引后,只要您使用索引标签,就会在您遍历时自动使用它。在您执行此操作的情况下:

Vertex v = graph.traversal().V().has("personId", "123").next();

会根据索引自动遍历,加快速度。 如果您尝试在没有索引标签 personId 的情况下进行此遍历,那么 Titan 会警告您这是低效的。

编辑:

如果您正在索引字符串或单词,那么您可能需要查看 this and this,只是一个快速警告。在索引单词和字符串时我们需要一些额外的配置。 IE。您需要使用适当的索引后端设置复合键。

为了利用索引,在查询中包含顶点标签很重要:

g.V().has(label, propertyName, propertyValue)

对于索引 w/o 标签约束 (indexOnly(label)),以下查询就足够了:

g.V().has(propertyName, propertyValue)