2017-08-10 2 views
0

と一致している必要があり、私は、次のElasticsearchコンテンツを持っている、基本的には、ネストされたスキルを持つユーザーのリストが私のインデックスElasticsearch:どのように最大数でソートする

{ 
    worker:{ 
    dynamic:"false", 
    properties: { 
    skills: { 
     type:"nested", 
     properties:{ 
      name:{ 
       type:"text" 
      }, 
      id:{ 
       type:"text" 
      } 
      } 
     } 
     } 
    } 
} 

とは私の単純なデータから

Elasticsearchマッピングが必要ですユーザー:

{ 
    "first_name": "Samir", 
    "last_name": "Yundt", 
    "skills":[ 
    { 
     "id": 1, 
     "name": "HTML" 
    }, 
    { 
     "id": 1, 
     "name": "Javascript" 
    } 
    ] 
}, 
{ 
    "first_name": "Kaley", 
    "last_name": "Fadel", 
    "skills":[ 
    { 
     "id": 1, 
     "name": "HTML" 
    }, 
    { 
     "id": 1, 
     "name": "CSS" 
    } 
    ] 
} 

マイESクエリ:

{ 
    query:{ 
     bool:{ 
     should:[ 
      { 
       nested:{ 
        path:"sub_processes", 
        query:{ 
        bool:{ 
         should:[ 
          { 
           match:{ 
           "skills.name": "HTML" 
           } 
          }, 
          { 
           match:{ 
           "skills.name": "CSS" 
           } 
          } 
         } 
        ] 
        } 
       } 
      } 
     } 
     ] 
    } 
    } 
} 

どうすれば最大数のスキルマッチでユーザーを並べ替えることができますか?私はいくつかのドキュメントが使用をブーストすることを推奨しているが、私の入力(スキル名)は動的なので不可能ではないことを発見しました。 ありがとうございました

+0

一致するスキルの数でソートしたいですか?集計を使用しようとしましたか? – zauzaj

+0

あなたの返信をありがとう、私はまだ試していない。このカイのために私はどうすればいいのですか?あなたは説明できますか? –

答えて

0

constant_scoreを使用して、スキルごとに固定スコアを与えることができます。

{ 
    "query": { 
    "bool": { 
     "should": [ 
     { 
      "constant_score": { 
      "boost": 1, 
      "query": { 
       "match": { 
       "skills.name": "HTML" 
       } 
      } 
      } 
     }, 
     { 
      "constant_score": { 
      "boost": 1, 
      "query": { 
       "match": { 
       "skills.name": "CSS" 
       } 
      } 
      } 
     } 
     ] 
    } 
    } 
} 

この方法では、あなたはスキルごとのNスコアポイントを取得します: はここでの例です。 あなたの結果はスキルカウントで自然にソートされます。

2つ以上のタグではqueryNormのため、Nは1とは異なります(ただし、2つの一致は常に1より強く、2より強い3など...タグは問題ありません)。フィールドあたりの正確なスコアが必要な場合は、keyword datatypeをご覧ください。

関連する問題