2017-03-02 12 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

このエラーによれば、rangesortオプションではサポートされていません。

だから、あなたはあなたのクエリで範囲を指定し、並べ替えを実行する必要があります。

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

あなたが「給与」を使用することができますでのソートに「DESC」:「ASC」または「給料」を昇順または降順。それが役に立てば幸い!次のようにフィルタを使用して答えを見つけた

+0

はまだ... – KayV

+0

ストレンジをSearchPhaseExecutionExceptionを取得し、それは完全に私の場合で動作します。.. – christinabo

+0

@KayVこの答えは動作するはずです、エラーSearchPhaseExecutionExceptionましたソートブロック内の範囲を配置しようとしているため、この回答でソートが適切に移動されてエラーが発生しないようにしてください。おそらくダブルチェックが必要です –

関連する問題