1

Bluemix で ibm グラフを使用していますが、これは初めてです。

bluemix が提供する GUI を使用して「test」という名前のグラフを作成し、そのグラフに ibm が提供するサンプル データ「Music Festival」をアップロードしました。

現在、以下のクエリを使用して、ラベル「attendee」を持つすべての頂点をクエリしようとしています。

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 docに従うことができます

  2. トラバーサルを開始するプロパティの (頂点/ラベル) インデックスを作成します。この例ではName, Gender and Genre、頂点のプロパティとnameエッジのプロパティを対象としています。

  3. スキーマ エンドポイントを呼び出して、スキーマ をグラフに追加します

  4. 後でインデックスを再作成する必要がないように、グラフにデータを追加する前にスキーマを作成することをお勧めします。それはあなたに多くの時間を節約します。

  5. スキーマを作成したら、既に作成したものを変更することはできませんが、後で新しいプロパティ/インデックスを追加できます。

使用する正確なコードについては、Java および Nodejsの次のコード サンプルを参照してください。

それが役立つことを願っています

于 2017-01-09T16:11:28.590 に答える