这只是一个快速的问题。我打算将我的搜索系统更改为 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 ]
}
}
}
}
关于php - 使用 Elasticsearch 进行地理搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25652294/