使用 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)
我正在试验 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)