首页 文章

Elasticsearch地理距离排序不完全/错误的顺序

提问于
浏览
0

我正在使用elasticsearch为具有数千个位置的Web项目获得更快的地理距离搜索功能 . 结果应按距离排序 . 我的搜索查询有效,但结果的顺序不正确 . 结果应按距离递增排序,但最初的结果是距离为“9 km”,然后是“100 km”,然后是“90 km” .

我的搜索查询JSON如下(用php创建):

{
    "index": "profiles",
    "type": "profile",
    "size": 30,
    "from": 0,
    "body": {
    "query": {
        "bool": {
            "filter": {
                "geo_distance": {
                    "distance": "100km",
                    "location": {
                        "lat": 49.449919468911,
                        "lon": 11.073560787681
                    }
                }
            }
        }
    },
    "script_fields": {
        "distance": {
            "lang": "groovy",
            "params": {
                "lat": 49.449919468911,
                "lon": 11.073560787681
            },
            "script": "doc['location'].distanceInKm(lat,lon)"
        }
    },
    "sort": [
        {
            "upgrade_sort": {
                "order": "desc"
            }
        },
        {
            "has_siegel": {
                "order": "desc"
            }
        },
        {
            "_geo_distance": {
                "location": {
                    "lat": 49.449919468911,
                    "lon": 11.073560787681
                },
                "order": "asc",
                "unit": "km"
            }
        }
    ]
    },
    "fields": [
    "_source",
    "distance"
    ]
}

不幸的是,我找不到任何错误,所以我希望有人可以帮助我 . 谢谢!

1 回答

  • 0

    您必须将 _geo_distance 排序放在第一个位置而不是第三个位置 . 就目前而言, _geo_distance sort只会按照 upgrade_sorthas_siegel 具有相同值的文档按升序距离对文档进行排序 . 试试这个:

    {
      "size": 30,
      "from": 0,
      "body": {
        "query": {
          "bool": {
            "filter": {
              "geo_distance": {
                "distance": "100km",
                "location": {
                  "lat": 49.449919468911,
                  "lon": 11.073560787681
                }
              }
            }
          }
        },
        "script_fields": {
          "distance": {
            "lang": "groovy",
            "params": {
              "lat": 49.449919468911,
              "lon": 11.073560787681
            },
            "script": "doc['location'].distanceInKm(lat,lon)"
          }
        },
        "sort": [
          {
            "_geo_distance": {
              "location": {
                "lat": 49.449919468911,
                "lon": 11.073560787681
              },
              "order": "asc",
              "unit": "km"
            }
          },
          {
            "upgrade_sort": {
              "order": "desc"
            }
          },
          {
            "has_siegel": {
              "order": "desc"
            }
          }
        ]
      },
      "fields": [
        "_source",
        "distance"
      ]
    }
    

相关问题