ElasticSearch クエリの 1 つで、関数スコアを定義し、それによって並べ替えたいと思います。関数 score は、計算されたスコアを取得し、ブースト値を追加します。各ドキュメントには、数値フィールドに格納されたブースト値があります。
このような:
{
"from": 0,
"size": 10,
"query": {
"function_score": {
"functions": [
{
"script_score": {
"script": "_score + doc['boostFactor'].value"
}
}
],
"query": {
"filtered": {
"query": {
"query_string": {
"query": "search for this!"
}
}
}
},
"boost_mode": "replace"
}
}
}
これまでのところ、これはうまくいきます。問題は次のとおりです。今後、各ドキュメントにはブースト値の配列が含まれます。
"boostFactor": [ 0, 0.5, 1, 3 ]
クエリを起動するときに、事前定義されたインデックスに基づいて、スクリプト スコアが配列の特定の要素を選択するようにしたいと思います。たとえば、index=2 とすると、スクリプト スコアは次のようになります。
"script_score": {
"script": "_score + doc['boostFactor'][2].value"
}
残念ながら、ElasticSearch はこれを受け入れません。
...Query Failed [Failed to execute main query]];
nested: CompileException[[Error: unexpected token in constructor]...
何か案は?