这只是一个简单的问题。我打算将我的搜索系统更改为elasticsearch。如果我在请求中发送elasticsearch三条信息:
我的弹性搜索结果标有以下信息:
我是否可以仅在该距离内返回结果而无需任何额外的弹性搜索插件?这个功能是否内置于elasticsearch?
答案 0 :(得分:1)
是的,通过三个非常简单的步骤。您必须映射数据(如设置数据库模式),插入数据,然后搜索它(过滤器)。
您必须正确映射该字段,以便将其识别为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 ]
}
}
}
}