获取具有labelname的所有顶点

时间:2017-01-08 19:43:13

标签: ibm-cloud ibm-graph

我正在使用bluemix中的ibm图表,并且对此更新。

我创建了一个名为' test'使用bluemix提供的GUI并上传样本数据' Music Festival'由ibm在该图中提供。

现在我正在尝试查询所有具有标签'参与者'的顶点。使用以下查询。

def gt = graph.traversal(); gt.V().hasLabel("attendee");

但我收到错误

Error: Error encountered evaluating script def gt = graph.traversal();gt.V().hasLabel("attendee"); with reason com.thinkaurelius.titan.core.TitanException: Could not find a suitable index to answer graph query and graph scans are disabled: [(~label = attendee)]:VERTEX

不确定我做错了什么。

有人可以告诉我哪里出错吗?

如何摆脱此错误并获得预期的输出?

由于

1 个答案:

答案 0 :(得分:2)

@Radhika,您的Gremlin查询是有效的Gremlin查询。但是,某些供应商(例如IBM Graph和Titan)选择仅允许用户使用索引的查询启动查询。这是为了确保您获得查询的性能。单独调用hasLabel()会给您Could not find a suitable index...错误,因为您无法为标签创建索引。您需要做的是按照此步骤执行一个使用索引属性的步骤:

graph.traversal();gt.V().hasLabel("band").has("genre","pop");

已在样本音乐节数据的架构中创建了genre的索引,如下所示

{
  "propertyKeys": [
   { "name": "name", "dataType": "String", "cardinality": "SINGLE" },
   { "name": "gender", "dataType": "String", "cardinality": "SINGLE" },
   { "name": "age", "dataType": "Integer", "cardinality": "SINGLE" },
   { "name": "genre", "dataType": "String", "cardinality": "SINGLE" },
   { "name": "monthly_listeners", "dataType": "String", "cardinality": "SINGLE" },
   { "name":"date","dataType":"String","cardinality":"SINGLE" },
   { "name":"time","dataType":"String","cardinality":"SINGLE" }
  ],
  "vertexLabels": [
   { "name": "attendee" },
   { "name": "band" },
   { "name": "venue" }
  ],
  "edgeLabels": [
   { "name": "bought_ticket", "multiplicity": "MULTI" },
   { "name":"advertised_to","multiplicity":"MULTI" },
   { "name":"performing_at","multiplicity":"MULTI" }
  ],
  "vertexIndexes": [
   { "name": "vByName", "propertyKeys": ["name"], "composite": true, "unique": false },
   { "name": "vByGender", "propertyKeys": ["gender"], "composite": true, "unique": false },
   { "name": "vByGenre", "propertyKeys": ["genre"], "composite": true, "unique": false}
  ],
  "edgeIndexes" :[
    { "name": "eByBoughtTicket", "propertyKeys": ["time"], "composite": true, "unique": false }
  ]

这就是为什么上述查询有效并且你需要做同样的事情。

  1. 如果您没有架构,请创建一个架构。你可以在之后建模 一个在上面或遵循API doc

  2. 为您即将开始的属性创建(顶点/标签)索引 你的遍历来自。在此示例中,Name, Gender and Genre表示 边缘属性的顶点属性和name

  3. 致电schema endpoint 将您的架构添加到图表

  4. 建议在添加任何数据之前创建架构 您的图表,以便您以后不必重新编制索引。那会拯救你 很多时候。

  5. 创建架构后,您无法修改自己创建的内容 已经,但您可以稍后添加新的属性/索引。

  6. 请查看Java and Nodejs的以下代码示例,了解要使用的确切代码。

    我希望有帮助