マルチカーディナリティのプロパティまたはエッジ

マルチカーディナリティのプロパティまたはエッジを設定する方法。

マルチカーディナリティにより、プロパティが単一のキー内に複数の値を格納したり、同じエッジ・ラベルを持つ複数のエッジが2つの頂点を接続したりすることが可能になります。

手順

マルチカーディナリティ・プロパティ

  • マルチカーディナリティ・プロパティitem_multのスキーマを作成し、2つの頂点を作成して、各頂点に定義済みプロパティの2つの項目が表示されるようにします。
    schema.propertyKey('item_mult').Text().multiple().ifNotExists().create()
    schema.vertexLabel('fridgeItem_multiple').properties('item_mult').ifNotExists().create()
    graph.addVertex(label,'fridgeItem_multiple','name', 'item1','item_mult', ['cheese', 'cheddar cheese'])
    graph.addVertex(label, 'fridgeItem_multiple','name', 'item2', 'item_mult',['yogurt','Greek yogurt'], 'item_mult', ['key lime yogurt'])
    g.V().hasLabel('fridgeItem_multiple').valueMap()
    item_multはマルチカーディナリティで定義されているため、キー値の挿入を任意の回数行うことができ、値を挿入するために2つのリストを使用することも可能です。すべての値が単一リストに格納されます。
    ==>{item_mult=[cheddar cheese, cheese], name=[item1]}
    ==>{item_mult=[Greek yogurt, key lime yogurt, yogurt], name=[item2]}
  • 挿入されたデータを詳しく調べます。
    g.V().has('fridgeItem_multiple', 'name', 'item2').values('item_mult')
    ==>Greek yogurt
    ==>key lime yogurt
    ==>yogurt
    この出力からは、リスト内の各エントリーが別々に格納された値であることが明らかです。
  • 特定の値を指定して、単一リスト項目の有無を確認します。
    g.V().hasLabel('fridgeItem_multiple').has('item_mult', 'Greek yogurt').valueMap()
    
    ==>{item_mult=[Greek yogurt, key lime yogurt, yogurt], name=[item2]}

マルチカーディナリティ・エッジ

  • マルチカーディナリティ・エッジのスキーマを作成します。
    // SCHEMA
    // PROPERTIES
    schema.propertyKey('author').Text().single().create()
    schema.propertyKey('city').Text().single().create()
    schema.propertyKey('dateStart').Text().single().create()
    schema.propertyKey('dateEnd').Text().single().create()
    // VERTEX LABELS
    schema.vertexLabel('author').properties('author').create()
    schema.vertexLabel('city').properties('city').create()
    // EDGE LABELS
    schema.edgeLabel('livedIn').multiple().connection('author','city').create()
    schema.edgeLabel('livedIn').properties('dateStart', 'dateEnd').add()
    // INDEXES
    schema.vertexLabel('author').index('byAuthor').materialized().by('author').add()
    schema.vertexLabel('city').index('byCity').materialized().by('city').add()
    schema.vertexLabel('author').index('byStartDate').outE('livedIn').by('dateStart').add()
    エッジ・ラベルlivedInはマルチカーディナリティで定義されています。graphloaderを使用して読み込まれるサンプル・データは次のようになります。
    author|city|dateStart|dateEnd
    Julia Child|Paris|1961-01-01|1967-02-10
    Julia Child|New York|1970-06-06|1971-09-23
    Julia Child|Chicago|1980-04-05|1981-01-01
    Julia Child|Paris|1990-01-01|1991-01-01
    Simone Beck|Paris|1960-01-01|1962-09-23
    このデータには、Julia Childがパリに住んでいた2つの期間(架空)が含まれ、マルチカーディナリティのためエッジは複数になります。
    このデータが読み込まれると、結果として生成されるグラフにマルチカーディナリティ・エッジの存在が示されます。