ジオバウンズ集約
すべての値を含む地理的バウンディングボックスを計算するメトリック集約で、GeopointまたはGeoshapeフィールドに対して行われます。
例:
Python
resp = client.indices.create(
index="museums",
mappings={
"properties": {
"location": {
"type": "geo_point"
}
}
},
)
print(resp)
resp1 = client.bulk(
index="museums",
refresh=True,
operations=[
{
"index": {
"_id": 1
}
},
{
"location": "POINT (4.912350 52.374081)",
"name": "NEMO Science Museum"
},
{
"index": {
"_id": 2
}
},
{
"location": "POINT (4.901618 52.369219)",
"name": "Museum Het Rembrandthuis"
},
{
"index": {
"_id": 3
}
},
{
"location": "POINT (4.914722 52.371667)",
"name": "Nederlands Scheepvaartmuseum"
},
{
"index": {
"_id": 4
}
},
{
"location": "POINT (4.405200 51.222900)",
"name": "Letterenhuis"
},
{
"index": {
"_id": 5
}
},
{
"location": "POINT (2.336389 48.861111)",
"name": "Musée du Louvre"
},
{
"index": {
"_id": 6
}
},
{
"location": "POINT (2.327000 48.860000)",
"name": "Musée d'Orsay"
}
],
)
print(resp1)
resp2 = client.search(
index="museums",
size="0",
query={
"match": {
"name": "musée"
}
},
aggs={
"viewport": {
"geo_bounds": {
"field": "location",
"wrap_longitude": True
}
}
},
)
print(resp2)
Ruby
response = client.indices.create(
index: 'museums',
body: {
mappings: {
properties: {
location: {
type: 'geo_point'
}
}
}
}
)
puts response
response = client.bulk(
index: 'museums',
refresh: true,
body: [
{
index: {
_id: 1
}
},
{
location: 'POINT (4.912350 52.374081)',
name: 'NEMO Science Museum'
},
{
index: {
_id: 2
}
},
{
location: 'POINT (4.901618 52.369219)',
name: 'Museum Het Rembrandthuis'
},
{
index: {
_id: 3
}
},
{
location: 'POINT (4.914722 52.371667)',
name: 'Nederlands Scheepvaartmuseum'
},
{
index: {
_id: 4
}
},
{
location: 'POINT (4.405200 51.222900)',
name: 'Letterenhuis'
},
{
index: {
_id: 5
}
},
{
location: 'POINT (2.336389 48.861111)',
name: 'Musée du Louvre'
},
{
index: {
_id: 6
}
},
{
location: 'POINT (2.327000 48.860000)',
name: "Musée d'Orsay"
}
]
)
puts response
response = client.search(
index: 'museums',
size: 0,
body: {
query: {
match: {
name: 'musée'
}
},
aggregations: {
viewport: {
geo_bounds: {
field: 'location',
wrap_longitude: true
}
}
}
}
)
puts response
Js
const response = await client.indices.create({
index: "museums",
mappings: {
properties: {
location: {
type: "geo_point",
},
},
},
});
console.log(response);
const response1 = await client.bulk({
index: "museums",
refresh: "true",
operations: [
{
index: {
_id: 1,
},
},
{
location: "POINT (4.912350 52.374081)",
name: "NEMO Science Museum",
},
{
index: {
_id: 2,
},
},
{
location: "POINT (4.901618 52.369219)",
name: "Museum Het Rembrandthuis",
},
{
index: {
_id: 3,
},
},
{
location: "POINT (4.914722 52.371667)",
name: "Nederlands Scheepvaartmuseum",
},
{
index: {
_id: 4,
},
},
{
location: "POINT (4.405200 51.222900)",
name: "Letterenhuis",
},
{
index: {
_id: 5,
},
},
{
location: "POINT (2.336389 48.861111)",
name: "Musée du Louvre",
},
{
index: {
_id: 6,
},
},
{
location: "POINT (2.327000 48.860000)",
name: "Musée d'Orsay",
},
],
});
console.log(response1);
const response2 = await client.search({
index: "museums",
size: 0,
query: {
match: {
name: "musée",
},
},
aggs: {
viewport: {
geo_bounds: {
field: "location",
wrap_longitude: true,
},
},
},
});
console.log(response2);
コンソール
PUT /museums
{
"mappings": {
"properties": {
"location": {
"type": "geo_point"
}
}
}
}
POST /museums/_bulk?refresh
{"index":{"_id":1}}
{"location": "POINT (4.912350 52.374081)", "name": "NEMO Science Museum"}
{"index":{"_id":2}}
{"location": "POINT (4.901618 52.369219)", "name": "Museum Het Rembrandthuis"}
{"index":{"_id":3}}
{"location": "POINT (4.914722 52.371667)", "name": "Nederlands Scheepvaartmuseum"}
{"index":{"_id":4}}
{"location": "POINT (4.405200 51.222900)", "name": "Letterenhuis"}
{"index":{"_id":5}}
{"location": "POINT (2.336389 48.861111)", "name": "Musée du Louvre"}
{"index":{"_id":6}}
{"location": "POINT (2.327000 48.860000)", "name": "Musée d'Orsay"}
POST /museums/_search?size=0
{
"query": {
"match": { "name": "musée" }
},
"aggs": {
"viewport": {
"geo_bounds": {
"field": "location",
"wrap_longitude": true
}
}
}
}
geo_bounds 集約は、境界を取得するために使用するフィールドを指定します。これはGeopointまたはGeoshapeタイプでなければなりません。 |
|
wrap_longitude はオプションのパラメータで、バウンディングボックスが国際日付変更線を越えることを許可するかどうかを指定します。デフォルト値はtrue です。 |
上記の集約は、名前が「musée」と一致するすべてのドキュメントの位置フィールドのバウンディングボックスを計算する方法を示しています。
コンソール-結果
{
...
"aggregations": {
"viewport": {
"bounds": {
"top_left": {
"lat": 48.86111099738628,
"lon": 2.3269999679178
},
"bottom_right": {
"lat": 48.85999997612089,
"lon": 2.3363889567553997
}
}
}
}
}
geo_shapeフィールドにおけるジオバウンズ集約
ジオバウンズ集約は、geo_shape
フィールドでもサポートされています。
もしwrap_longitude
がtrue
(デフォルト)に設定されている場合、バウンディングボックスは国際日付変更線を越えることができ、top_left
経度がtop_right
経度よりも大きい境界を返します。
例えば、地理的バウンディングボックスの右上の経度は通常、左下の経度よりも大きくなります。しかし、領域が180°子午線を越えると、左下の経度の値は右上の経度の値よりも大きくなります。詳細については、Open Geospatial Consortiumのウェブサイトの地理的バウンディングボックスを参照してください。
例:
Python
resp = client.indices.create(
index="places",
mappings={
"properties": {
"geometry": {
"type": "geo_shape"
}
}
},
)
print(resp)
resp1 = client.bulk(
index="places",
refresh=True,
operations=[
{
"index": {
"_id": 1
}
},
{
"name": "NEMO Science Museum",
"geometry": "POINT(4.912350 52.374081)"
},
{
"index": {
"_id": 2
}
},
{
"name": "Sportpark De Weeren",
"geometry": {
"type": "Polygon",
"coordinates": [
[
[
4.965305328369141,
52.39347642069457
],
[
4.966979026794433,
52.391721758934835
],
[
4.969425201416015,
52.39238958618537
],
[
4.967944622039794,
52.39420969150824
],
[
4.965305328369141,
52.39347642069457
]
]
]
}
}
],
)
print(resp1)
resp2 = client.search(
index="places",
size="0",
aggs={
"viewport": {
"geo_bounds": {
"field": "geometry"
}
}
},
)
print(resp2)
Ruby
response = client.indices.create(
index: 'places',
body: {
mappings: {
properties: {
geometry: {
type: 'geo_shape'
}
}
}
}
)
puts response
response = client.bulk(
index: 'places',
refresh: true,
body: [
{
index: {
_id: 1
}
},
{
name: 'NEMO Science Museum',
geometry: 'POINT(4.912350 52.374081)'
},
{
index: {
_id: 2
}
},
{
name: 'Sportpark De Weeren',
geometry: {
type: 'Polygon',
coordinates: [
[
[
4.965305328369141,
52.39347642069457
],
[
4.966979026794433,
52.391721758934835
],
[
4.969425201416015,
52.39238958618537
],
[
4.967944622039794,
52.39420969150824
],
[
4.965305328369141,
52.39347642069457
]
]
]
}
}
]
)
puts response
response = client.search(
index: 'places',
size: 0,
body: {
aggregations: {
viewport: {
geo_bounds: {
field: 'geometry'
}
}
}
}
)
puts response
Js
const response = await client.indices.create({
index: "places",
mappings: {
properties: {
geometry: {
type: "geo_shape",
},
},
},
});
console.log(response);
const response1 = await client.bulk({
index: "places",
refresh: "true",
operations: [
{
index: {
_id: 1,
},
},
{
name: "NEMO Science Museum",
geometry: "POINT(4.912350 52.374081)",
},
{
index: {
_id: 2,
},
},
{
name: "Sportpark De Weeren",
geometry: {
type: "Polygon",
coordinates: [
[
[4.965305328369141, 52.39347642069457],
[4.966979026794433, 52.391721758934835],
[4.969425201416015, 52.39238958618537],
[4.967944622039794, 52.39420969150824],
[4.965305328369141, 52.39347642069457],
],
],
},
},
],
});
console.log(response1);
const response2 = await client.search({
index: "places",
size: 0,
aggs: {
viewport: {
geo_bounds: {
field: "geometry",
},
},
},
});
console.log(response2);
コンソール
PUT /places
{
"mappings": {
"properties": {
"geometry": {
"type": "geo_shape"
}
}
}
}
POST /places/_bulk?refresh
{"index":{"_id":1}}
{"name": "NEMO Science Museum", "geometry": "POINT(4.912350 52.374081)" }
{"index":{"_id":2}}
{"name": "Sportpark De Weeren", "geometry": { "type": "Polygon", "coordinates": [ [ [ 4.965305328369141, 52.39347642069457 ], [ 4.966979026794433, 52.391721758934835 ], [ 4.969425201416015, 52.39238958618537 ], [ 4.967944622039794, 52.39420969150824 ], [ 4.965305328369141, 52.39347642069457 ] ] ] } }
POST /places/_search?size=0
{
"aggs": {
"viewport": {
"geo_bounds": {
"field": "geometry"
}
}
}
}
コンソール-結果
{
...
"aggregations": {
"viewport": {
"bounds": {
"top_left": {
"lat": 52.39420966710895,
"lon": 4.912349972873926
},
"bottom_right": {
"lat": 52.374080987647176,
"lon": 4.969425117596984
}
}
}
}
}