在使用Elasticsearch进行地理位置查询时,可以利用其内置的地理位置类型和相关查询。以下是一个简单的例子,展示如何创建一个包含地理位置信息的索引,并执行一个地理边界框查询。
PUT /attractions
{
"mappings": {
"restaurant": {
"properties": {
"name": {
"type": "text"
},
"location": {
"type": "geo_point"
}
}
}
}
}
在这个例子中,我们创建了一个名为attractions
的索引,并定义了一个名为restaurant
的类型,其中包含一个name
字段和一个location
字段,用于存储地理位置信息。
接下来,我们可以添加一些文档:
POST /attractions/restaurant/_bulk
{ "index": {}}
{ "name": "McDonalds", "location": { "lat": 37.7749, "lon": -122.4194 } }
{ "index": {}}
{ "name": "Burger King", "location": { "lat": 40.7128, "lon": -74.0060 } }
然后,我们可以执行一个地理边界框查询,找出在特定边界内的景点:
GET /attractions/restaurant/_search
{
"query": {
"geo_bounding_box": {
"location": {
"top_left": {
"lat": 40.8,
"lon": -73.
},
"bottom_right": {
"lat": 40.7,
"lon": -74.
}
}
}
}
}
在这个查询中,我们指定了一个边界框,并查找在这个框子内的餐馆。这个查询将返回所有在指定的矩形边界内的景点。