PointおよびLineStringの地理空間クエリー

PointおよびLineStringの地理空間クエリーの実行方法。

PointおよびLineStringの地理空間クエリーの実行。

地理空間型のPoint型とLineString型のスキーマの定義

地理空間フィールド型のスキーマを定義します。例を次に示します。
<?xml version="1.0" ?>
<schema name="spatial-no-jts" version="1.5">
    <types>
        <fieldType name="string" class="solr.StrField" />
        <fieldType name="boolean" class="solr.BoolField" />
        <!-- When geo="false", indicate worldBounds using ENVELOPE(minX, maxX, maxY, minY) notation -->
        <fieldType name="rpt"
                   class="solr.SpatialRecursivePrefixTreeFieldType"
                   geo="false"
                   worldBounds="ENVELOPE(-1000, 1000, 1000, -1000)"
                   maxDistErr="0.001"
                   distanceUnits="degrees" />
    </types>

    <fields>
        <field name="id" type="string" indexed="true" stored="true" />
        <field name="point" type="rpt" indexed="true" stored="true" />
        <field name="linestring" type="rpt" indexed="true" stored="true" />
    </fields>

<uniqueKey>id</uniqueKey>

</schema>

Apache Solr™地理空間フィールド型

Solr地理空間フィールド型では、テーブル・スキーマで各地理空間フィールド型を宣言します。例を次に示します。
CREATE TABLE test ( id text PRIMARY KEY, point 'PointType', linestring 'LineStringType');

地理空間データの挿入または更新

データベースでデータを挿入または更新するには、INSERTまたはUPDATEコマンドでgeo型を指定します。例を次に示します。
INSERT INTO test (id, point, linestring) VALUES ('1', 'POINT(5 50)', 
    'LINESTRING (30 10, 10 30, 40 40)' );
INSERT INTO test (id, point, linestring) VALUES ('2', 'POINT(100 100)', 
    'LINESTRING (50 20, 20 40, 50 50)' );

地理空間データのクエリー実行

ポイント(4, 49)から10単位半径内のポイントを検索します。
SELECT * FROM test WHERE solr_query=' {"q":"*:*", "fq":"point:\"IsWithin(BUFFER(POINT(4.0 49.0), 10.0))\""}';

ポイント(10, 30)を含むラインストリングを検索します。

SELECT * FROM test WHERE solr_query='linestring:"Intersects(POINT(10 30))"';
地理空間型のPolygonsとMultiPolygonsのインデックス作成およびクエリーの方法の詳細については、チュートリアルを参照してください。