ジオグリッドクエリ
geo_point
と geo_shape
の値がジオグリッド集約からのグリッドセルと交差するものを一致させます。
このクエリは、バケットのキーを提供することによって、ジオグリッド集約のバケット内にあるドキュメントを一致させるように設計されています。ジオハッシュおよびジオタイルグリッドの場合、このクエリは geo_point および geo_shape フィールドに使用できます。ジオヘックスグリッドの場合、geo_point フィールドにのみ使用できます。
例
次のドキュメントがインデックスされていると仮定します:
Python
resp = client.indices.create(
index="my_locations",
mappings={
"properties": {
"location": {
"type": "geo_point"
}
}
},
)
print(resp)
resp1 = client.index(
index="my_locations",
id="1",
refresh=True,
document={
"location": "POINT(4.912350 52.374081)",
"city": "Amsterdam",
"name": "NEMO Science Museum"
},
)
print(resp1)
resp2 = client.index(
index="my_locations",
id="2",
refresh=True,
document={
"location": "POINT(4.405200 51.222900)",
"city": "Antwerp",
"name": "Letterenhuis"
},
)
print(resp2)
resp3 = client.index(
index="my_locations",
id="3",
refresh=True,
document={
"location": "POINT(2.336389 48.861111)",
"city": "Paris",
"name": "Musée du Louvre"
},
)
print(resp3)
Ruby
response = client.indices.create(
index: 'my_locations',
body: {
mappings: {
properties: {
location: {
type: 'geo_point'
}
}
}
}
)
puts response
response = client.index(
index: 'my_locations',
id: 1,
refresh: true,
body: {
location: 'POINT(4.912350 52.374081)',
city: 'Amsterdam',
name: 'NEMO Science Museum'
}
)
puts response
response = client.index(
index: 'my_locations',
id: 2,
refresh: true,
body: {
location: 'POINT(4.405200 51.222900)',
city: 'Antwerp',
name: 'Letterenhuis'
}
)
puts response
response = client.index(
index: 'my_locations',
id: 3,
refresh: true,
body: {
location: 'POINT(2.336389 48.861111)',
city: 'Paris',
name: 'Musée du Louvre'
}
)
puts response
Js
const response = await client.indices.create({
index: "my_locations",
mappings: {
properties: {
location: {
type: "geo_point",
},
},
},
});
console.log(response);
const response1 = await client.index({
index: "my_locations",
id: 1,
refresh: "true",
document: {
location: "POINT(4.912350 52.374081)",
city: "Amsterdam",
name: "NEMO Science Museum",
},
});
console.log(response1);
const response2 = await client.index({
index: "my_locations",
id: 2,
refresh: "true",
document: {
location: "POINT(4.405200 51.222900)",
city: "Antwerp",
name: "Letterenhuis",
},
});
console.log(response2);
const response3 = await client.index({
index: "my_locations",
id: 3,
refresh: "true",
document: {
location: "POINT(2.336389 48.861111)",
city: "Paris",
name: "Musée du Louvre",
},
});
console.log(response3);
コンソール
PUT /my_locations
{
"mappings": {
"properties": {
"location": {
"type": "geo_point"
}
}
}
}
PUT /my_locations/_doc/1?refresh
{
"location" : "POINT(4.912350 52.374081)",
"city": "Amsterdam",
"name": "NEMO Science Museum"
}
PUT /my_locations/_doc/2?refresh
{
"location" : "POINT(4.405200 51.222900)",
"city": "Antwerp",
"name": "Letterenhuis"
}
PUT /my_locations/_doc/3?refresh
{
"location" : "POINT(2.336389 48.861111)",
"city": "Paris",
"name": "Musée du Louvre"
}
ジオハッシュグリッド
ジオハッシュグリッド集約を使用すると、ドキュメントをそのジオハッシュ値に基づいてグループ化することができます:
Python
resp = client.search(
index="my_locations",
size=0,
aggs={
"grouped": {
"geohash_grid": {
"field": "location",
"precision": 2
}
}
},
)
print(resp)
Ruby
response = client.search(
index: 'my_locations',
body: {
size: 0,
aggregations: {
grouped: {
geohash_grid: {
field: 'location',
precision: 2
}
}
}
}
)
puts response
Js
const response = await client.search({
index: "my_locations",
size: 0,
aggs: {
grouped: {
geohash_grid: {
field: "location",
precision: 2,
},
},
},
});
console.log(response);
コンソール
GET /my_locations/_search
{
"size" : 0,
"aggs" : {
"grouped" : {
"geohash_grid" : {
"field" : "location",
"precision" : 2
}
}
}
}
コンソール結果
{
"took" : 10,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 3,
"relation" : "eq"
},
"max_score" : null,
"hits" : [ ]
},
"aggregations" : {
"grouped" : {
"buckets" : [
{
"key" : "u1",
"doc_count" : 2
},
{
"key" : "u0",
"doc_count" : 1
}
]
}
}
}
これらのバケットの1つからドキュメントを抽出するには、次の構文を使用してバケットキーを使用してジオグリッドクエリを実行します:
Python
resp = client.search(
index="my_locations",
query={
"geo_grid": {
"location": {
"geohash": "u0"
}
}
},
)
print(resp)
Js
const response = await client.search({
index: "my_locations",
query: {
geo_grid: {
location: {
geohash: "u0",
},
},
},
});
console.log(response);
コンソール
GET /my_locations/_search
{
"query": {
"geo_grid" :{
"location" : {
"geohash" : "u0"
}
}
}
}
コンソール結果
{
"took" : 1,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 1,
"relation" : "eq"
},
"max_score" : 1.0,
"hits" : [
{
"_index" : "my_locations",
"_id" : "3",
"_score" : 1.0,
"_source" : {
"location" : "POINT(2.336389 48.861111)",
"city" : "Paris",
"name" : "Musée du Louvre"
}
}
]
}
}
ジオタイルグリッド
ジオタイルグリッド集約を使用すると、ドキュメントをそのジオタイル値に基づいてグループ化することができます:
Python
resp = client.search(
index="my_locations",
size=0,
aggs={
"grouped": {
"geotile_grid": {
"field": "location",
"precision": 6
}
}
},
)
print(resp)
Ruby
response = client.search(
index: 'my_locations',
body: {
size: 0,
aggregations: {
grouped: {
geotile_grid: {
field: 'location',
precision: 6
}
}
}
}
)
puts response
Js
const response = await client.search({
index: "my_locations",
size: 0,
aggs: {
grouped: {
geotile_grid: {
field: "location",
precision: 6,
},
},
},
});
console.log(response);
コンソール
GET /my_locations/_search
{
"size" : 0,
"aggs" : {
"grouped" : {
"geotile_grid" : {
"field" : "location",
"precision" : 6
}
}
}
}
コンソール結果
{
"took" : 1,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 3,
"relation" : "eq"
},
"max_score" : null,
"hits" : [ ]
},
"aggregations" : {
"grouped" : {
"buckets" : [
{
"key" : "6/32/21",
"doc_count" : 2
},
{
"key" : "6/32/22",
"doc_count" : 1
}
]
}
}
}
これらのバケットの1つからドキュメントを抽出するには、次の構文を使用してバケットキーを使用してジオグリッドクエリを実行します:
Python
resp = client.search(
index="my_locations",
query={
"geo_grid": {
"location": {
"geotile": "6/32/22"
}
}
},
)
print(resp)
Js
const response = await client.search({
index: "my_locations",
query: {
geo_grid: {
location: {
geotile: "6/32/22",
},
},
},
});
console.log(response);
コンソール
GET /my_locations/_search
{
"query": {
"geo_grid" :{
"location" : {
"geotile" : "6/32/22"
}
}
}
}
コンソール結果
{
"took" : 1,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 1,
"relation" : "eq"
},
"max_score" : 1.0,
"hits" : [
{
"_index" : "my_locations",
"_id" : "3",
"_score" : 1.0,
"_source" : {
"location" : "POINT(2.336389 48.861111)",
"city" : "Paris",
"name" : "Musée du Louvre"
}
}
]
}
}
ジオヘックスグリッド
ジオヘックスグリッド集約を使用すると、ドキュメントをそのジオヘックス値に基づいてグループ化することができます:
Python
resp = client.search(
index="my_locations",
size=0,
aggs={
"grouped": {
"geohex_grid": {
"field": "location",
"precision": 1
}
}
},
)
print(resp)
Js
const response = await client.search({
index: "my_locations",
size: 0,
aggs: {
grouped: {
geohex_grid: {
field: "location",
precision: 1,
},
},
},
});
console.log(response);
コンソール
GET /my_locations/_search
{
"size" : 0,
"aggs" : {
"grouped" : {
"geohex_grid" : {
"field" : "location",
"precision" : 1
}
}
}
}
コンソール結果
{
"took" : 2,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 3,
"relation" : "eq"
},
"max_score" : null,
"hits" : [ ]
},
"aggregations" : {
"grouped" : {
"buckets" : [
{
"key" : "81197ffffffffff",
"doc_count" : 2
},
{
"key" : "811fbffffffffff",
"doc_count" : 1
}
]
}
}
}
これらのバケットの1つからドキュメントを抽出するには、次の構文を使用してバケットキーを使用してジオグリッドクエリを実行します:
Python
resp = client.search(
index="my_locations",
query={
"geo_grid": {
"location": {
"geohex": "811fbffffffffff"
}
}
},
)
print(resp)
Js
const response = await client.search({
index: "my_locations",
query: {
geo_grid: {
location: {
geohex: "811fbffffffffff",
},
},
},
});
console.log(response);
コンソール
GET /my_locations/_search
{
"query": {
"geo_grid" :{
"location" : {
"geohex" : "811fbffffffffff"
}
}
}
}
コンソール結果
{
"took" : 26,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 1,
"relation" : "eq"
},
"max_score" : 1.0,
"hits" : [
{
"_index" : "my_locations",
"_id" : "3",
"_score" : 1.0,
"_source" : {
"location" : "POINT(2.336389 48.861111)",
"city" : "Paris",
"name" : "Musée du Louvre"
}
}
]
}
}