1

我在 bluemix 中使用 ibm graph,对此我很陌生。

我使用 bluemix 提供的 GUI 创建了一个名为“test”的图表,并将 ibm 提供的示例数据“Music Festival”上传到该图表中。

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

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

不知道我做错了什么。

有人能告诉我哪里出错了吗?

我怎样才能摆脱这个错误并获得预期的输出?

谢谢

4

1 回答 1

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 文档

  2. 为您将开始遍历的属性创建一个(顶点/标签)索引。在此示例中,Name, Gender and Genre用于顶点属性和name边属性。

  3. 调用架构端点 以将架构添加到图形中

  4. 建议在将任何数据添加到图表之前创建架构,这样您以后就不必重新索引。这将为您节省大量时间。

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

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

我希望这会有所帮助

于 2017-01-09T16:11:28.590 回答