Cartesian空間スキーマ

Cartesian空間スキーマの作成方法。

空間形状を使用して検索できるデータは、ポイント、ラインストリング、ポリゴンという、3つのCartesian空間データ型に格納されます。これらのデータ型のスキーマを作成した後、これらを使用してCartesian空間クエリーを構成できます。円またはポリゴン内のデカルト座標点、ポイント、またはラインストリングを検索するCartesianクエリーでは、DSE Searchインデックスを作成する必要があります。

以下の例では、graph.addVertex(…)コマンドを使用してCartesianデータが読み込まれますが、DSE Graph Loaderを使用してDSE 5.0.9およびDSE 5.1.2からCartesianデータを読み込むことができます。

手順

ポイント・スキーマ

  • ポイントのスキーマを作成し、ポイントのプロパティ値で頂点を追加します。
    schema.propertyKey('name').Text().create()
    schema.propertyKey('point').Point().withBounds(-3, -3, 3, 3).create()
    schema.vertexLabel('location').properties('name','point').create()
    graph.addVertex(label, 'location', 'name', 'p0', 'point', Geo.point(0.5, 0.5))
    pointプロパティを持つlocationの頂点ラベルが作成されます。Cartesian空間ポイントでは、withBounds(x1, y1, x2, y2)メソッドによって、検索はx-yグリッド内のデフォルトの有効な値範囲に制限されます。
    ポイントが存在することを確認します。
    g.V().has('location', 'name', 'p0').valueMap()
    ==>{name=[p0], point=[POINT (0.5 0.5)]}

ラインストリング・スキーマ

  • ラインストリングのスキーマを作成し、ラインストリングのプロパティ値で頂点を追加します。
    schema.propertyKey('name').Text().create()
    schema.propertyKey('line').Linestring().withBounds(-3, -3, 3, 3).create()
    schema.vertexLabel('lineLocation').properties('name','line').create()
    graph.addVertex(label, 'lineLocation', 'name', 'l1, 'line', "LINESTRING(0 0, 1 1)")
    LineStringプロパティを持つlineLocationの頂点ラベルが作成されます。Cartesian空間ラインストリングでは、Cartesian空間ポイントと同様に、withBounds(x1, y1, x2, y2)メソッドによって、検索はx-yグリッド内のデフォルトの有効な値範囲に制限されます。
    ラインストリングが存在することを確認します。
    g.V().has('lineLocation','name','l1').valueMap()
    ==>{line=[LINESTRING (0 0, 1 1)], name=[l1]}

ポリゴン・スキーマ

  • ポリゴンのスキーマを作成し、ポリゴンのプロパティ値で頂点を追加します。
    schema.propertyKey('name').Text().create()
    schema.propertyKey('polygon').Polygon().withBounds(-3, -3, 3, 3).create()
    schema.vertexLabel('polyLocation').properties('name','polygon').create()
    graph.addVertex(label, 'polyLocation','name', 'g1', 'polygon',Geo.polygon(0,0,1,1,0,1,0,0))
    Polygonプロパティを持つpolyLocationの頂点ラベルが作成されます。Cartesian空間ポリゴンでは、Cartesian空間ポイントと同様に、withBounds(x1, y1, x2, y2)メソッドによって、検索はx-yグリッド内のデフォルトの有効な値範囲に制限されます。
    ポリゴンが存在することを確認します。
     g.V().has('polyLocation','name','g1').valueMap()
    ==>{polygon=[POLYGON ((0 0, 1 1, 0 1, 0 0))], name=[g1]}

DSE Searchインデックス

  • DSE Graphは、Cartesianサーチをネイティブにサポートしますが、検索インデックスを使用せずに実行する場合、グラフ内の頂点の数が増加してもスケールは確保できません。検索インデックスを使用せずにこのようなクエリーを行うと、フルスキャンが必要となるため、クエリー・パフォーマンスがひどく低下します。DSE Searchインデックスは、ポイントとラインストリングのインデックスを作成できますが、ポリゴンのインデックスを作成できません。
    //SEARCH INDEX ONLY WORKS FOR POINT AND LINESTRING
    schema.vertexLabel('location').index('search').search().by('point').add()
    schema.vertexLabel('lineLocation').index('search').search().by('line').add()
    注: DSE Searchでは、ポリゴンのインデックスは作成されません。