【问题标题】:Find vertex/node using Titan or TinkPop Java api使用 Titan 或 TinkPop Java api 查找顶点/节点
【发布时间】:2023-08-12 08:15:01
【问题描述】:

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

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

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

在 Titan 中,我使用

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

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

【问题讨论】:

    标签: java titan gremlin tinkerpop


    【解决方案1】:

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

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

    对于没有标签约束的索引 (indexOnly(label)),以下查询就足够了:

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

    【讨论】:

      【解决方案2】:

      一旦您建立了索引,只要您使用索引标签,它就会在您遍历时自动使用。在你这样做的情况下:

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

      它会自动使用索引进行遍历以加快速度。 如果您尝试在没有标签 personId 被索引的情况下进行此遍历,那么 Titan 会警告您它效率低下。

      编辑:

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

      【讨论】: