ES按距离排序时出错

时间:2016-08-22 20:09:20

标签: sorting elasticsearch geo foselasticabundle

我试图按距离对搜索结果进行排序。但是,当我尝试时,我得到以下错误:

{
   "error": {
      "root_cause": [
         {
            "type": "illegal_argument_exception",
            "reason": "sort option [location] not supported"
         }
      ],
      "type": "search_phase_execution_exception",
      "reason": "all shards failed",
      "phase": "query",
      "grouped": true,
      "failed_shards": [
         {
            "shard": 0,
            "index": "roeselaredev",
            "node": "2UYlfd7sTd6qlJWgdK2wzQ",
            "reason": {
               "type": "illegal_argument_exception",
               "reason": "sort option [location] not supported"
            }
         }
      ]
   },
   "status": 400
}

我发送的查询如下所示:

GET _search
{
    "query": {
        "match_all": [] 
    },
    "sort": [

        {
            "geo_distance": {
                "location": {
                    "lat": 50.9436034,
                    "long": 3.1242917
                },
                "order":"asc",
                "unit":"km",
                "distance_type":"plane"
            }
        },
        {
            "_score": {
                "order":"desc"   
            }        
        }
    ]
}

尽可能地告诉我,我按照文件中的说明进行了说明。我没有收到格式错误的查询结果。我只是通过距离选项获得不支持的结果。关于我做错了什么的任何想法?

1 个答案:

答案 0 :(得分:1)

查询dsl无效,OP几乎是正确的:)但缺少得分不足。

按距离排序时,_geo_distance而不是geo_distance

示例:

GET _search
{
    "query": {
        "match_all": [] 
    },
    "sort": [

        {
            "_geo_distance": {
                "location": {
                    "lat": 50.9436034,
                    "long": 3.1242917
                },
                "order":"asc",
                "unit":"km",
                "distance_type":"plane"
            }
        },
        {
            "_score": {
                "order":"desc"   
            }        
        }
    ]
}