2017-01-09 14 views
0

私は、4つの値(赤、青、黄、緑)のいずれかを持つことができるフィールド(色など)を持っています。私は、赤が1のスコアを持ち、すべての赤が上になるように並べ替え、青のスコアが2、黄が3というようにソートします。Elasticsearch explicit sorting score

elasticsearchで並べ替えるためにこれらの手動スコアリングを割り当てるにはどうすればよいですか?

+0

これまでに試したマッピング、クエリ、例外を表示してください。 – user3775217

答えて

1

function_score機能を使用すると、カスタムスコアリング機能を使用できます。 match_allクエリを必要なものと置き換えることができます。

{ 
    "query": { 
    "function_score": { 
     "boost_mode": "replace", 
     "query": { 
     "match_all": {} 
     }, 
     "functions": [ 
     { 
      "filter": { 
      "term": { 
       "color": "red" 
      } 
      }, 
      "weight": 1 
     }, 
     { 
      "filter": { 
      "term": { 
       "color": "blue" 
      } 
      }, 
      "weight": 3 
     }, 
     { 
      "filter": { 
      "term": { 
       "color": "yellow" 
      } 
      }, 
      "weight": 2 
     } 
     ] 
    } 
    }, 
    "size": 20, 
    "from": 0 
} 
+0

これはいいですが、私はインデックス作成時にソートフィールドを追加することで同じ結果を達成できました...したがって、ドキュメントに1,2,3のスコアを持つcolorScoreフィールドが含まれています。 – Marconi

+0

はい、異なるアプローチ、インデックス作成時間、またはクエリ時間です。 – Mysterion