0
這只是一個簡單的問題。我打算將我的搜索系統更改爲elasticsearch。如果我送elasticsearch三條信息在我的要求:使用Elasticsearch進行地理搜索
- 龍
- 緯度
- 距離
而且我elasticsearch結果標註了以下信息:
- 長
- 緯
是否有可能只在該距離內返回結果而無需額外的彈性搜索插件?這個功能是否內置在elasticsearch中?
這只是一個簡單的問題。我打算將我的搜索系統更改爲elasticsearch。如果我送elasticsearch三條信息在我的要求:使用Elasticsearch進行地理搜索
而且我elasticsearch結果標註了以下信息:
是否有可能只在該距離內返回結果而無需額外的彈性搜索插件?這個功能是否內置在elasticsearch中?
是的,在三個非常簡單的步驟。您必須映射數據(如設置數據庫模式),插入數據,然後搜索它(過濾器)。
您必須正確映射該字段,以便將其識別爲geo_point
。注意:如果您想要更靈活地存儲其他類型的地理位置(例如多邊形或線串),那麼您可能想將其映射爲geo_shape
。
{
"mappings" : {
"TYPE_NAME" : {
"properties" : {
"fieldName" : { "type" : "geo_point" }
}
}
}
}
一旦映射,您可以使用point
type插入位置詳細信息。
{
"fieldName" : {
"type" : "point",
"coordinates" : [ longitude, latitude ]
}
}
您可以鍵入不同,以達到相同的效果,但也許更直觀地(而不是[X,Y],這是不是最常見的地理空間順序)。
{
"fieldName" : {
"type" : "point",
"coordinates" : {
"lat" : latitude,
"lon" : longitude
}
}
}
無論哪種方式,它將代表相同的東西(在過濾器中同樣如此)。
當您映射領域,並開始接入點,那麼你就可以運行geo_distance
filter所需distance
內找點:
{
"filtered" : {
"query" : { "match_all" : {} },
"filter" : {
"geo_distance" : {
"distance" : "10mi",
"fieldName" : [ longitude, latitude ]
}
}
}
}