如何在一个范围内对搜索结果进行排序?

时间:2017-03-02 10:04:08

标签: elasticsearch

我正在使用ElasticSearch并尝试在特定范围内对结果进行排序。 这是我的要求是我希望搜索结果具有特定范围的薪水并对其进行排序。 所以这是我正在尝试的查询:

curl -XPOST 'localhost:9200/employee/_search?pretty' -d '
{
  "query": { "match_all": {} },
  "sort" : {
    salary : {
      "range" : {
        "gte": 20000,
        "lte": 30000
      }
    }
  }
}'

但是我在执行此操作时遇到以下异常:

"error" : "SearchPhaseExecutionException[Failed to execute phase [query], all `shards failed; shardFailures {[eUQoAs5YTV-4zV0is80k-w][bank][0]: SearchParseException[[bank][0]: query[ConstantScore(*:*)],from[-1],size[-1]: Parse Failure [Failed to parse source [\n{\n  \"query\": { \"match_all\": {} },\n  \"sort\" : {\n    balance : {\n      \"range\" : {\n        \"gte\": 20000,\n        \"lte\": 30000\n      }\n    }\n  }\n}]]]; nested: ElasticsearchIllegalArgumentException[sort option [range] not supported]; }`

我没有得到我犯错的地方......

2 个答案:

答案 0 :(得分:0)

根据错误,它表示range选项不支持sort

因此,您需要在查询中指定范围,然后执行排序:

GET index_name/type_name/_search
{
    "sort": {
      "salary": "asc"
    },
    "query": {
        "range" : {
            "salary" : {
                "gte" : 20000,
                "lte" : 30000
            }
        }
    }
}

你可以使用"薪水":" asc"或"薪水":" desc"按升序或降序排序。希望它有所帮助!

答案 1 :(得分:0)

使用过滤器找到答案如下:

curl -XPOST 'localhost:9200/employee/_search?pretty' -d '
{
  "sort":{"salary": "asc"},
  "query": {
    "filtered": {
      "query": { "match_all": {} },
      "filter": {
        "range": {
          "salary": {
            "gte": 20000,
            "lte": 30000
          }
        }
      }
    }
  }
}'