Elasticsearchにあるデータで、あるフィールドに重みをつけて検索したい
そして、単に重み付けだけでなく条件式を書いて条件にマッチしたフィールドだけに重み付けしたい
まずは重み付け検索について www.elastic.co
script_score
を利用する
GET /_search { "query": { "script_score": { "query": { "match": { "message": "elasticsearch" } }, "script": { "source": "doc['my-int'].value / 10 " } } } }
このとき、scriptのsourceでreturnされるものがスコアになるので、このsourceの中でフィールドの値に重み付けしてあげればよい
次に条件式だが、これもsource
の中に書くことができる
source
はElasticsearch独自のPainless言語が記述できる
文法のドキュメントが見当たらないが、記述方法の例が下のドキュメントにあった(v6.8だが雰囲気はわかった)
Painless Examples | Painless Scripting Language [6.8] | Elastic
これを参考にsourceには次のような書き方で判別して重みづけすることができるようになった
"source": "if(doc['condition'].value == 'Hoge'){ doc['my-int'].value / 10 } else {doc['my-int'].value}",