Cartesian空間スキーマ
Cartesian空間スキーマの作成方法。
空間形状を使用して検索できるデータは、ポイント、ラインストリング、ポリゴンという、3つのCartesian空間データ型に格納されます。これらのデータ型のスキーマを作成した後、これらを使用してCartesian空間クエリーを構成できます。円またはポリゴン内のデカルト座標点、ポイント、またはラインストリングを検索するCartesianクエリーでは、DSE Searchインデックスを作成する必要があります。
以下の例では、graph.addVertex(…)
コマンドを使用してCartesianデータが読み込まれますが、DSE Graph Loaderを使用してDSE 5.0.9およびDSE 5.1.2からCartesianデータを読み込むことができます。
手順
ポイント・スキーマ
-
ポイントのスキーマを作成し、ポイントのプロパティ値で頂点を追加します。
pointプロパティを持つlocationの頂点ラベルが作成されます。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))
withBounds(x1, y1, x2, y2)
メソッドによって、検索はx-yグリッド内のデフォルトの有効な値範囲に制限されます。ポイントが存在することを確認します。g.V().has('location', 'name', 'p0').valueMap() ==>{name=[p0], point=[POINT (0.5 0.5)]}
ラインストリング・スキーマ
-
ラインストリングのスキーマを作成し、ラインストリングのプロパティ値で頂点を追加します。
LineStringプロパティを持つlineLocationの頂点ラベルが作成されます。Cartesian空間ラインストリングでは、Cartesian空間ポイントと同様に、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)")
withBounds(x1, y1, x2, y2)
メソッドによって、検索はx-yグリッド内のデフォルトの有効な値範囲に制限されます。ラインストリングが存在することを確認します。g.V().has('lineLocation','name','l1').valueMap() ==>{line=[LINESTRING (0 0, 1 1)], name=[l1]}
ポリゴン・スキーマ
-
ポリゴンのスキーマを作成し、ポリゴンのプロパティ値で頂点を追加します。
Polygonプロパティを持つpolyLocationの頂点ラベルが作成されます。Cartesian空間ポリゴンでは、Cartesian空間ポイントと同様に、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))
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では、ポリゴンのインデックスは作成されません。