Elasticsearch 2.1 で以下のスコアリングの質問に対する最速の解決策を見つけることに興味があります。
私の文書にはいくつかの類似したフィールドがweight_1, ..., weight_N
あり、decay_1, ..., decay_N
. また、事前にパラメーターdecay_1, ..., decay_N
とscale_1, ..., scale_N
. ドキュメントスコアとして次のように計算したいと思います。
SUM(weight_i * 0.5**((decay_i - origin_i) / scale_i), i=1..N)
前もって知っN
ているので、合計する必要があるフィールドの数が正確にわかり、スコアリング ソリューションは動的な数のフィールドを処理する必要がありません。
これは非常に簡単に行うことができますN = 1
:
{
"query": {
"function_score": {
"functions": [
{
"exp": {
"decay_1": {
"origin": "origin_1",
"scale": "scale_1",
"decay": "0.5"
}
}
},
{
"field_value_factor": {
"field": "weight_1",
"missing": 0
}
}
]
}
}
}
確かに、これは Lucene 式 (N
前もって知っているので)、またはネイティブ Java スクリプトまたは Groovy スクリプトを使用して実現できます。しかし、私は最もパフォーマンスの高いソリューションに興味があります。これは通常、可能な限りビルトインを使用することを意味しているようです。