@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 }
]
这就是上述查询有效的原因,您也需要这样做。
如果您没有架构,请创建一个。您可以在上面的模型之后进行建模或遵循API 文档
为您将开始遍历的属性创建一个(顶点/标签)索引。在此示例中,Name, Gender and Genre
用于顶点属性和name
边属性。
调用架构端点
以将架构添加到图形中
建议在将任何数据添加到图表之前创建架构,这样您以后就不必重新索引。这将为您节省大量时间。
创建架构后,您无法修改已创建的内容,但您可以稍后添加新的属性/索引。
查看以下Java 和 Nodejs代码示例,了解要使用的确切代码。
我希望这会有所帮助