2017-03-02 68 views
0

我與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]; }` 

,我沒有得到我在哪裏做的錯誤...

回答

0

發現了使用過濾器的答案如下:

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

根據錯誤,它說,range不被sort選項的支持。

所以,你需要在查詢指定的範圍內,然後進行排序:

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

你可以用「工資」:「ASC」或「工資」:「降序」排序中升序或降序。希望能幫助到你!

+0

仍然得到SearchPhaseExecutionException ... – KayV

+0

奇怪,它完美的作品在我的情況.. – christinabo

+0

@KayV這個答案應該工作,錯誤SearchPhaseExecutionException是因爲你想放置的排序塊內的範圍,在這個答案的排序正確地移動,所以你不應該得到的錯誤了..你應該仔細檢查 –

相關問題