@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 docに従うことができます
トラバーサルを開始するプロパティの (頂点/ラベル) インデックスを作成します。この例ではName, Gender and Genre
、頂点のプロパティとname
エッジのプロパティを対象としています。
スキーマ エンドポイントを呼び出して、スキーマ
をグラフに追加します
後でインデックスを再作成する必要がないように、グラフにデータを追加する前にスキーマを作成することをお勧めします。それはあなたに多くの時間を節約します。
スキーマを作成したら、既に作成したものを変更することはできませんが、後で新しいプロパティ/インデックスを追加できます。
使用する正確なコードについては、Java および Nodejsの次のコード サンプルを参照してください。
それが役立つことを願っています