形状フィールドタイプ
shape
データタイプは、長方形や多角形などの任意の x, y
カルテシアン形状のインデックス作成と検索を容易にします。これは、座標が2次元平面座標系にあるジオメトリをインデックス作成およびクエリするために使用できます。
このタイプを使用してドキュメントをクエリするには、shape Queryを使用します。
マッピングオプション
geo_shape
フィールドタイプと同様に、shape
フィールドマッピングは、GeoJSON または Well-Known Text (WKT) ジオメトリオブジェクトを形状タイプにマッピングします。これを有効にするには、ユーザーはフィールドを形状タイプに明示的にマッピングする必要があります。
オプション | 説明 | デフォルト |
---|---|---|
orientation |
ポリゴン / マルチポリゴンの頂点順序を解釈する方法をオプションで定義します。このパラメータは、2つの座標系ルール(右手または左手)のいずれかを定義します。各ルールは3つの異なる方法で指定できます。1. 右手ルール: right , ccw , counterclockwise 、 |
- 左手ルール:
left
,cw
,clockwise
。デフォルトの向き(counterclockwise
)は、OGC標準に準拠しており、外部リングの頂点は反時計回りの順序で、内部リング(穴)の頂点は時計回りの順序で定義されます。このパラメータをgeo_shape
マッピングで設定すると、geo_shape
フィールドの座標リストの頂点順序が明示的に設定されますが、各個別のGeoJSONまたはWKTドキュメントで上書きできます。 |ccw
|
|ignore_malformed
| trueの場合、無効なGeoJSONまたはWKT形状は無視されます。false(デフォルト)の場合、無効なGeoJSONおよびWKT形状は例外をスローし、ドキュメント全体を拒否します。 |false
|
|ignore_z_value
|true
(デフォルト)の場合、3次元ポイントが受け入れられ(ソースに保存されますが)、緯度と経度の値のみがインデックスされ、3次元目は無視されます。false
の場合、緯度と経度(2次元)以外の値を含むジオポイントは例外をスローし、ドキュメント全体を拒否します。 |true
|
|coerce
|true
の場合、ポリゴン内の未閉じの線形リングが自動的に閉じられます。 |false
|
インデックス作成アプローチ
geo_shape
のように、shape
フィールドタイプは、ジオメトリを三角メッシュに分解し、各三角形をBKDツリー内の7次元ポイントとしてインデックス作成します。インデクサに提供される座標は単精度浮動小数点値であるため、フィールドはJava仮想マシンによって提供されるのと同じ精度(通常は1E-38
)を保証します。ポリゴン/マルチポリゴンの場合、テッセレーターのパフォーマンスは、ジオメトリを定義する頂点の数に主に依存します。
重要な注意事項
CONTAINS
関係クエリ - shape
クエリで relation
が contains
として定義されている場合、ElasticSearch 7.5.0以降で作成されたインデックスがサポートされています。
例
Python
resp = client.indices.create(
index="example",
mappings={
"properties": {
"geometry": {
"type": "shape"
}
}
},
)
print(resp)
Ruby
response = client.indices.create(
index: 'example',
body: {
mappings: {
properties: {
geometry: {
type: 'shape'
}
}
}
}
)
puts response
Js
const response = await client.indices.create({
index: "example",
mappings: {
properties: {
geometry: {
type: "shape",
},
},
},
});
console.log(response);
コンソール
PUT /example
{
"mappings": {
"properties": {
"geometry": {
"type": "shape"
}
}
}
}
このマッピング定義は、ジオメトリフィールドを形状タイプにマッピングします。インデクサは頂点値に単精度浮動小数点を使用するため、float
値がJava仮想マシンによって提供されるのと同じ精度(通常は1E-38)で保証されます。
入力構造
形状は、GeoJSON または Well-Known Text (WKT) フォーマットを使用して表現できます。以下の表は、GeoJSONおよびWKTをElasticsearchタイプにマッピングしたものです:
GeoJSONタイプ | WKTタイプ | Elasticsearchタイプ | 説明 |
---|---|---|---|
Point |
POINT |
point |
単一の x, y 座標。 |
LineString |
LINESTRING |
linestring |
2つ以上のポイントで与えられた任意のライン。 |
Polygon |
POLYGON |
polygon |
最初と最後のポイントが一致する閉じたポリゴンで、したがって n + 1 頂点が必要で、n 辺のポリゴンを作成し、最小 4 頂点が必要です。 |
MultiPoint |
MULTIPOINT |
multipoint |
接続されていないが、関連している可能性のあるポイントの配列。 |
MultiLineString |
MULTILINESTRING |
multilinestring |
別々のラインストリングの配列。 |
MultiPolygon |
MULTIPOLYGON |
multipolygon |
別々のポリゴンの配列。 |
GeometryCollection |
GEOMETRYCOLLECTION |
geometrycollection |
複数のタイプが共存できる形状コレクション(例: ポイントとラインストリング)。 |
N/A |
BBOX |
envelope |
上部左および下部右ポイントのみを指定することで指定された境界矩形またはエンベロープ。 |
すべてのタイプについて、内側の type
および coordinates
フィールドが必要です。
GeoJSONおよびWKT、したがってElasticsearchでは、正しい座標順序は(X, Y)です。これは、多くの地理空間API(例: geo_shape
)とは異なり、通常は口語的な緯度、経度(Y, X)順序を使用します。
ポイント
ポイントは、カルテシアン x, y
空間内の単一の座標です。これは、仮想世界または投影空間内の関心のあるアイテムの位置を表すことがあります。以下は、GeoJSON内のポイントの例です。
Python
resp = client.index(
index="example",
document={
"location": {
"type": "point",
"coordinates": [
-377.03653,
389.897676
]
}
},
)
print(resp)
Ruby
response = client.index(
index: 'example',
body: {
location: {
type: 'point',
coordinates: [
-377.03653,
389.897676
]
}
}
)
puts response
Js
const response = await client.index({
index: "example",
document: {
location: {
type: "point",
coordinates: [-377.03653, 389.897676],
},
},
});
console.log(response);
コンソール
POST /example/_doc
{
"location" : {
"type" : "point",
"coordinates" : [-377.03653, 389.897676]
}
}
以下は、WKT内のポイントの例です:
Python
resp = client.index(
index="example",
document={
"location": "POINT (-377.03653 389.897676)"
},
)
print(resp)
Ruby
response = client.index(
index: 'example',
body: {
location: 'POINT (-377.03653 389.897676)'
}
)
puts response
Js
const response = await client.index({
index: "example",
document: {
location: "POINT (-377.03653 389.897676)",
},
});
console.log(response);
コンソール
POST /example/_doc
{
"location" : "POINT (-377.03653 389.897676)"
}
ラインストリング
2つ以上の位置の配列によって定義される linestring
。2つのポイントのみを指定することで、linestring
は直線を表します。2つ以上のポイントを指定すると、任意のパスが作成されます。以下は、GeoJSON内のラインストリングの例です。
Python
resp = client.index(
index="example",
document={
"location": {
"type": "linestring",
"coordinates": [
[
-377.03653,
389.897676
],
[
-377.009051,
389.889939
]
]
}
},
)
print(resp)
Ruby
response = client.index(
index: 'example',
body: {
location: {
type: 'linestring',
coordinates: [
[
-377.03653,
389.897676
],
[
-377.009051,
389.889939
]
]
}
}
)
puts response
Js
const response = await client.index({
index: "example",
document: {
location: {
type: "linestring",
coordinates: [
[-377.03653, 389.897676],
[-377.009051, 389.889939],
],
},
},
});
console.log(response);
コンソール
POST /example/_doc
{
"location" : {
"type" : "linestring",
"coordinates" : [[-377.03653, 389.897676], [-377.009051, 389.889939]]
}
}
以下は、WKT内のラインストリングの例です:
Python
resp = client.index(
index="example",
document={
"location": "LINESTRING (-377.03653 389.897676, -377.009051 389.889939)"
},
)
print(resp)
Ruby
response = client.index(
index: 'example',
body: {
location: 'LINESTRING (-377.03653 389.897676, -377.009051 389.889939)'
}
)
puts response
Js
const response = await client.index({
index: "example",
document: {
location: "LINESTRING (-377.03653 389.897676, -377.009051 389.889939)",
},
});
console.log(response);
コンソール
POST /example/_doc
{
"location" : "LINESTRING (-377.03653 389.897676, -377.009051 389.889939)"
}
ポリゴン
ポリゴンは、ポイントのリストによって定義されます。各(外部)リストの最初と最後のポイントは同じでなければなりません(ポリゴンは閉じている必要があります)。以下は、GeoJSON内のポリゴンの例です。
Python
resp = client.index(
index="example",
document={
"location": {
"type": "polygon",
"coordinates": [
[
[
1000,
-1001
],
[
1001,
-1001
],
[
1001,
-1000
],
[
1000,
-1000
],
[
1000,
-1001
]
]
]
}
},
)
print(resp)
Ruby
response = client.index(
index: 'example',
body: {
location: {
type: 'polygon',
coordinates: [
[
[
1000,
-1001
],
[
1001,
-1001
],
[
1001,
-1000
],
[
1000,
-1000
],
[
1000,
-1001
]
]
]
}
}
)
puts response
Js
const response = await client.index({
index: "example",
document: {
location: {
type: "polygon",
coordinates: [
[
[1000, -1001],
[1001, -1001],
[1001, -1000],
[1000, -1000],
[1000, -1001],
],
],
},
},
});
console.log(response);
コンソール
POST /example/_doc
{
"location" : {
"type" : "polygon",
"coordinates" : [
[ [1000.0, -1001.0], [1001.0, -1001.0], [1001.0, -1000.0], [1000.0, -1000.0], [1000.0, -1001.0] ]
]
}
}
以下は、WKT内のポリゴンの例です:
Python
resp = client.index(
index="example",
document={
"location": "POLYGON ((1000.0 -1001.0, 1001.0 -1001.0, 1001.0 -1000.0, 1000.0 -1000.0, 1000.0 -1001.0))"
},
)
print(resp)
Ruby
response = client.index(
index: 'example',
body: {
location: 'POLYGON ((1000.0 -1001.0, 1001.0 -1001.0, 1001.0 -1000.0, 1000.0 -1000.0, 1000.0 -1001.0))'
}
)
puts response
Js
const response = await client.index({
index: "example",
document: {
location:
"POLYGON ((1000.0 -1001.0, 1001.0 -1001.0, 1001.0 -1000.0, 1000.0 -1000.0, 1000.0 -1001.0))",
},
});
console.log(response);
コンソール
POST /example/_doc
{
"location" : "POLYGON ((1000.0 -1001.0, 1001.0 -1001.0, 1001.0 -1000.0, 1000.0 -1000.0, 1000.0 -1001.0))"
}
最初の配列はポリゴンの外部境界を表し、他の配列は内部形状(”穴”)を表します。以下は、穴のあるポリゴンのGeoJSONの例です:
Python
resp = client.index(
index="example",
document={
"location": {
"type": "polygon",
"coordinates": [
[
[
1000,
-1001
],
[
1001,
-1001
],
[
1001,
-1000
],
[
1000,
-1000
],
[
1000,
-1001
]
],
[
[
1000.2,
-1001.2
],
[
1000.8,
-1001.2
],
[
1000.8,
-1001.8
],
[
1000.2,
-1001.8
],
[
1000.2,
-1001.2
]
]
]
}
},
)
print(resp)
Ruby
response = client.index(
index: 'example',
body: {
location: {
type: 'polygon',
coordinates: [
[
[
1000,
-1001
],
[
1001,
-1001
],
[
1001,
-1000
],
[
1000,
-1000
],
[
1000,
-1001
]
],
[
[
1000.2,
-1001.2
],
[
1000.8,
-1001.2
],
[
1000.8,
-1001.8
],
[
1000.2,
-1001.8
],
[
1000.2,
-1001.2
]
]
]
}
}
)
puts response
Js
const response = await client.index({
index: "example",
document: {
location: {
type: "polygon",
coordinates: [
[
[1000, -1001],
[1001, -1001],
[1001, -1000],
[1000, -1000],
[1000, -1001],
],
[
[1000.2, -1001.2],
[1000.8, -1001.2],
[1000.8, -1001.8],
[1000.2, -1001.8],
[1000.2, -1001.2],
],
],
},
},
});
console.log(response);
コンソール
POST /example/_doc
{
"location" : {
"type" : "polygon",
"coordinates" : [
[ [1000.0, -1001.0], [1001.0, -1001.0], [1001.0, -1000.0], [1000.0, -1000.0], [1000.0, -1001.0] ],
[ [1000.2, -1001.2], [1000.8, -1001.2], [1000.8, -1001.8], [1000.2, -1001.8], [1000.2, -1001.2] ]
]
}
}
以下は、WKT内の穴のあるポリゴンの例です:
Python
resp = client.index(
index="example",
document={
"location": "POLYGON ((1000.0 1000.0, 1001.0 1000.0, 1001.0 1001.0, 1000.0 1001.0, 1000.0 1000.0), (1000.2 1000.2, 1000.8 1000.2, 1000.8 1000.8, 1000.2 1000.8, 1000.2 1000.2))"
},
)
print(resp)
Ruby
response = client.index(
index: 'example',
body: {
location: 'POLYGON ((1000.0 1000.0, 1001.0 1000.0, 1001.0 1001.0, 1000.0 1001.0, 1000.0 1000.0), (1000.2 1000.2, 1000.8 1000.2, 1000.8 1000.8, 1000.2 1000.8, 1000.2 1000.2))'
}
)
puts response
Js
const response = await client.index({
index: "example",
document: {
location:
"POLYGON ((1000.0 1000.0, 1001.0 1000.0, 1001.0 1001.0, 1000.0 1001.0, 1000.0 1000.0), (1000.2 1000.2, 1000.8 1000.2, 1000.8 1000.8, 1000.2 1000.8, 1000.2 1000.2))",
},
});
console.log(response);
コンソール
POST /example/_doc
{
"location" : "POLYGON ((1000.0 1000.0, 1001.0 1000.0, 1001.0 1001.0, 1000.0 1001.0, 1000.0 1000.0), (1000.2 1000.2, 1000.8 1000.2, 1000.8 1000.8, 1000.2 1000.8, 1000.2 1000.2))"
}
重要な注意事項: WKTは頂点の特定の順序を強制しません。GeoJSONは、外部ポリゴンが反時計回りで、内部形状が時計回りである必要があることを義務付けており、これはOpen Geospatial Consortium (OGC) Simple Feature Access仕様の頂点順序に合致しています。
デフォルトでは、Elasticsearchは頂点を反時計回り(右手ルール)で期待します。データが時計回り(左手ルール)で提供される場合、ユーザーはフィールドマッピング内またはドキュメントに提供されたパラメータとしてorientation
パラメータを変更できます。
以下は、ドキュメント内のorientation
パラメータを上書きする例です:
Python
resp = client.index(
index="example",
document={
"location": {
"type": "polygon",
"orientation": "clockwise",
"coordinates": [
[
[
1000,
1000
],
[
1000,
1001
],
[
1001,
1001
],
[
1001,
1000
],
[
1000,
1000
]
]
]
}
},
)
print(resp)
Ruby
response = client.index(
index: 'example',
body: {
location: {
type: 'polygon',
orientation: 'clockwise',
coordinates: [
[
[
1000,
1000
],
[
1000,
1001
],
[
1001,
1001
],
[
1001,
1000
],
[
1000,
1000
]
]
]
}
}
)
puts response
Js
const response = await client.index({
index: "example",
document: {
location: {
type: "polygon",
orientation: "clockwise",
coordinates: [
[
[1000, 1000],
[1000, 1001],
[1001, 1001],
[1001, 1000],
[1000, 1000],
],
],
},
},
});
console.log(response);
コンソール
POST /example/_doc
{
"location" : {
"type" : "polygon",
"orientation" : "clockwise",
"coordinates" : [
[ [1000.0, 1000.0], [1000.0, 1001.0], [1001.0, 1001.0], [1001.0, 1000.0], [1000.0, 1000.0] ]
]
}
}
マルチポイント
以下は、GeoJSONポイントのリストの例です:
Python
resp = client.index(
index="example",
document={
"location": {
"type": "multipoint",
"coordinates": [
[
1002,
1002
],
[
1003,
2000
]
]
}
},
)
print(resp)
Ruby
response = client.index(
index: 'example',
body: {
location: {
type: 'multipoint',
coordinates: [
[
1002,
1002
],
[
1003,
2000
]
]
}
}
)
puts response
Js
const response = await client.index({
index: "example",
document: {
location: {
type: "multipoint",
coordinates: [
[1002, 1002],
[1003, 2000],
],
},
},
});
console.log(response);
コンソール
POST /example/_doc
{
"location" : {
"type" : "multipoint",
"coordinates" : [
[1002.0, 1002.0], [1003.0, 2000.0]
]
}
}
以下は、WKTポイントのリストの例です:
Python
resp = client.index(
index="example",
document={
"location": "MULTIPOINT (1002.0 2000.0, 1003.0 2000.0)"
},
)
print(resp)
Ruby
response = client.index(
index: 'example',
body: {
location: 'MULTIPOINT (1002.0 2000.0, 1003.0 2000.0)'
}
)
puts response
Js
const response = await client.index({
index: "example",
document: {
location: "MULTIPOINT (1002.0 2000.0, 1003.0 2000.0)",
},
});
console.log(response);
コンソール
POST /example/_doc
{
"location" : "MULTIPOINT (1002.0 2000.0, 1003.0 2000.0)"
}
マルチラインストリング
以下は、GeoJSONラインストリングのリストの例です:
Python
resp = client.index(
index="example",
document={
"location": {
"type": "multilinestring",
"coordinates": [
[
[
1002,
200
],
[
1003,
200
],
[
1003,
300
],
[
1002,
300
]
],
[
[
1000,
100
],
[
1001,
100
],
[
1001,
100
],
[
1000,
100
]
],
[
[
1000.2,
100.2
],
[
1000.8,
100.2
],
[
1000.8,
100.8
],
[
1000.2,
100.8
]
]
]
}
},
)
print(resp)
Ruby
response = client.index(
index: 'example',
body: {
location: {
type: 'multilinestring',
coordinates: [
[
[
1002,
200
],
[
1003,
200
],
[
1003,
300
],
[
1002,
300
]
],
[
[
1000,
100
],
[
1001,
100
],
[
1001,
100
],
[
1000,
100
]
],
[
[
1000.2,
100.2
],
[
1000.8,
100.2
],
[
1000.8,
100.8
],
[
1000.2,
100.8
]
]
]
}
}
)
puts response
Js
const response = await client.index({
index: "example",
document: {
location: {
type: "multilinestring",
coordinates: [
[
[1002, 200],
[1003, 200],
[1003, 300],
[1002, 300],
],
[
[1000, 100],
[1001, 100],
[1001, 100],
[1000, 100],
],
[
[1000.2, 100.2],
[1000.8, 100.2],
[1000.8, 100.8],
[1000.2, 100.8],
],
],
},
},
});
console.log(response);
コンソール
POST /example/_doc
{
"location" : {
"type" : "multilinestring",
"coordinates" : [
[ [1002.0, 200.0], [1003.0, 200.0], [1003.0, 300.0], [1002.0, 300.0] ],
[ [1000.0, 100.0], [1001.0, 100.0], [1001.0, 100.0], [1000.0, 100.0] ],
[ [1000.2, 100.2], [1000.8, 100.2], [1000.8, 100.8], [1000.2, 100.8] ]
]
}
}
以下は、WKTラインストリングのリストの例です:
Python
resp = client.index(
index="example",
document={
"location": "MULTILINESTRING ((1002.0 200.0, 1003.0 200.0, 1003.0 300.0, 1002.0 300.0), (1000.0 100.0, 1001.0 100.0, 1001.0 100.0, 1000.0 100.0), (1000.2 0.2, 1000.8 100.2, 1000.8 100.8, 1000.2 100.8))"
},
)
print(resp)
Ruby
response = client.index(
index: 'example',
body: {
location: 'MULTILINESTRING ((1002.0 200.0, 1003.0 200.0, 1003.0 300.0, 1002.0 300.0), (1000.0 100.0, 1001.0 100.0, 1001.0 100.0, 1000.0 100.0), (1000.2 0.2, 1000.8 100.2, 1000.8 100.8, 1000.2 100.8))'
}
)
puts response
Js
const response = await client.index({
index: "example",
document: {
location:
"MULTILINESTRING ((1002.0 200.0, 1003.0 200.0, 1003.0 300.0, 1002.0 300.0), (1000.0 100.0, 1001.0 100.0, 1001.0 100.0, 1000.0 100.0), (1000.2 0.2, 1000.8 100.2, 1000.8 100.8, 1000.2 100.8))",
},
});
console.log(response);
コンソール
POST /example/_doc
{
"location" : "MULTILINESTRING ((1002.0 200.0, 1003.0 200.0, 1003.0 300.0, 1002.0 300.0), (1000.0 100.0, 1001.0 100.0, 1001.0 100.0, 1000.0 100.0), (1000.2 0.2, 1000.8 100.2, 1000.8 100.8, 1000.2 100.8))"
}
マルチポリゴン
以下は、GeoJSONポリゴンのリストの例です(2番目のポリゴンには穴があります):
Python
resp = client.index(
index="example",
document={
"location": {
"type": "multipolygon",
"coordinates": [
[
[
[
1002,
200
],
[
1003,
200
],
[
1003,
300
],
[
1002,
300
],
[
1002,
200
]
]
],
[
[
[
1000,
200
],
[
1001,
100
],
[
1001,
100
],
[
1000,
100
],
[
1000,
100
]
],
[
[
1000.2,
200.2
],
[
1000.8,
100.2
],
[
1000.8,
100.8
],
[
1000.2,
100.8
],
[
1000.2,
100.2
]
]
]
]
}
},
)
print(resp)
Js
const response = await client.index({
index: "example",
document: {
location: {
type: "multipolygon",
coordinates: [
[
[
[1002, 200],
[1003, 200],
[1003, 300],
[1002, 300],
[1002, 200],
],
],
[
[
[1000, 200],
[1001, 100],
[1001, 100],
[1000, 100],
[1000, 100],
],
[
[1000.2, 200.2],
[1000.8, 100.2],
[1000.8, 100.8],
[1000.2, 100.8],
[1000.2, 100.2],
],
],
],
},
},
});
console.log(response);
コンソール
POST /example/_doc
{
"location" : {
"type" : "multipolygon",
"coordinates" : [
[ [[1002.0, 200.0], [1003.0, 200.0], [1003.0, 300.0], [1002.0, 300.0], [1002.0, 200.0]] ],
[ [[1000.0, 200.0], [1001.0, 100.0], [1001.0, 100.0], [1000.0, 100.0], [1000.0, 100.0]],
[[1000.2, 200.2], [1000.8, 100.2], [1000.8, 100.8], [1000.2, 100.8], [1000.2, 100.2]] ]
]
}
}
以下は、WKTポリゴンのリストの例です(2番目のポリゴンには穴があります):
Python
resp = client.index(
index="example",
document={
"location": "MULTIPOLYGON (((1002.0 200.0, 1003.0 200.0, 1003.0 300.0, 1002.0 300.0, 102.0 200.0)), ((1000.0 100.0, 1001.0 100.0, 1001.0 100.0, 1000.0 100.0, 1000.0 100.0), (1000.2 100.2, 1000.8 100.2, 1000.8 100.8, 1000.2 100.8, 1000.2 100.2)))"
},
)
print(resp)
Js
const response = await client.index({
index: "example",
document: {
location:
"MULTIPOLYGON (((1002.0 200.0, 1003.0 200.0, 1003.0 300.0, 1002.0 300.0, 102.0 200.0)), ((1000.0 100.0, 1001.0 100.0, 1001.0 100.0, 1000.0 100.0, 1000.0 100.0), (1000.2 100.2, 1000.8 100.2, 1000.8 100.8, 1000.2 100.8, 1000.2 100.2)))",
},
});
console.log(response);
コンソール
POST /example/_doc
{
"location" : "MULTIPOLYGON (((1002.0 200.0, 1003.0 200.0, 1003.0 300.0, 1002.0 300.0, 102.0 200.0)), ((1000.0 100.0, 1001.0 100.0, 1001.0 100.0, 1000.0 100.0, 1000.0 100.0), (1000.2 100.2, 1000.8 100.2, 1000.8 100.8, 1000.2 100.8, 1000.2 100.2)))"
}
ジオメトリコレクション
以下は、GeoJSONジオメトリオブジェクトのコレクションの例です:
Python
resp = client.index(
index="example",
document={
"location": {
"type": "geometrycollection",
"geometries": [
{
"type": "point",
"coordinates": [
1000,
100
]
},
{
"type": "linestring",
"coordinates": [
[
1001,
100
],
[
1002,
100
]
]
}
]
}
},
)
print(resp)
Ruby
response = client.index(
index: 'example',
body: {
location: {
type: 'geometrycollection',
geometries: [
{
type: 'point',
coordinates: [
1000,
100
]
},
{
type: 'linestring',
coordinates: [
[
1001,
100
],
[
1002,
100
]
]
}
]
}
}
)
puts response
Js
const response = await client.index({
index: "example",
document: {
location: {
type: "geometrycollection",
geometries: [
{
type: "point",
coordinates: [1000, 100],
},
{
type: "linestring",
coordinates: [
[1001, 100],
[1002, 100],
],
},
],
},
},
});
console.log(response);
コンソール
POST /example/_doc
{
"location" : {
"type": "geometrycollection",
"geometries": [
{
"type": "point",
"coordinates": [1000.0, 100.0]
},
{
"type": "linestring",
"coordinates": [ [1001.0, 100.0], [1002.0, 100.0] ]
}
]
}
}
以下は、WKTジオメトリオブジェクトのコレクションの例です:
Python
resp = client.index(
index="example",
document={
"location": "GEOMETRYCOLLECTION (POINT (1000.0 100.0), LINESTRING (1001.0 100.0, 1002.0 100.0))"
},
)
print(resp)
Ruby
response = client.index(
index: 'example',
body: {
location: 'GEOMETRYCOLLECTION (POINT (1000.0 100.0), LINESTRING (1001.0 100.0, 1002.0 100.0))'
}
)
puts response
Js
const response = await client.index({
index: "example",
document: {
location:
"GEOMETRYCOLLECTION (POINT (1000.0 100.0), LINESTRING (1001.0 100.0, 1002.0 100.0))",
},
});
console.log(response);
コンソール
POST /example/_doc
{
"location" : "GEOMETRYCOLLECTION (POINT (1000.0 100.0), LINESTRING (1001.0 100.0, 1002.0 100.0))"
}
エンベロープ
Elasticsearchは、形状を表すために上部左および下部右ポイントの座標からなる envelope
タイプをサポートしています。フォーマットは [[minX, maxY], [maxX, minY]]
です:
Python
resp = client.index(
index="example",
document={
"location": {
"type": "envelope",
"coordinates": [
[
1000,
100
],
[
1001,
100
]
]
}
},
)
print(resp)
Js
const response = await client.index({
index: "example",
document: {
location: {
type: "envelope",
coordinates: [
[1000, 100],
[1001, 100],
],
},
},
});
console.log(response);
コンソール
POST /example/_doc
{
"location" : {
"type" : "envelope",
"coordinates" : [ [1000.0, 100.0], [1001.0, 100.0] ]
}
}
以下は、WKT BBOXフォーマットを使用したエンベロープの例です:
注意: WKT仕様は、次の順序を期待します: minLon, maxLon, maxLat, minLat.
Python
resp = client.index(
index="example",
document={
"location": "BBOX (1000.0, 1002.0, 2000.0, 1000.0)"
},
)
print(resp)
Js
const response = await client.index({
index: "example",
document: {
location: "BBOX (1000.0, 1002.0, 2000.0, 1000.0)",
},
});
console.log(response);
コンソール
POST /example/_doc
{
"location" : "BBOX (1000.0, 1002.0, 2000.0, 1000.0)"
}
インデックス形状のソートと取得
形状の複雑な入力構造とインデックス表現のため、現在のところ形状をソートしたり、そのフィールドを直接取得したりすることはできません。shape
値は、_source
フィールドを通じてのみ取得可能です。