2017-08-30 5 views
0

elasticsearchでカスタムソートが可能かどうかは知っていますか?Elasticsearchでのカスタムソート

カテゴリフィールドに並べ替えがあります。すべてのレコードをカテゴリ別にグループ化します。これは素晴らしいです。

しかし、車、書籍、食べ物などのリストを並べ替えることができます。

それから、車が最初に表示され、次に本と最後に食べ物が表示されますか?

+0

、間違いなくfunction_scoreはあなたの問題を解決しますが、我々は得ることができます私はモデルとクエリを見ることができれば、よりパフォーマンスの高いソリューションです。 – user3775217

+0

車、書籍、食品の内容を理解するためのサンプル文書を投稿してください:/ –

答えて

1

あなたはfunction_score query、このようなものを使用することができます:あなたがあなたの代わりにmatch_allクエリの今使用しているクエリ方はもちろん、置いて、デフォルトはである(sortをオフのままに

{ 
    "query": { 
     "function_score": { 
      "query": { "match_all": {} }, 
      "boost": "5", 
      "functions": [ 
       { 
        "filter": { "match": { "category": "cars" } }, 
        "weight": 100 
       }, 
       { 
        "filter": { "match": { "category": "books" } }, 
        "weight": 50 
       }, 
       { 
        "filter": { "match": { "category": "food" } }, 
        "weight": 1 
       } 
      ], 
      "score_mode": "max", 
      "boost_mode": "replace" 
     } 
    } 
} 

スコア、あなたがここで欲しいものです)。

これは、通常生成するscore elasticsearchを、各カテゴリのカスタムスコアで置き換えます。あなたは他のboost_modeで試して、カテゴリ内で妥当なランク付けをすることができます。スコアリングで何が起こっているのかを理解する必要がある場合は、最上位のクエリに"explain": trueを追加できます。