全文検索のために以下のようなquery_stringを使ったクエリがあるとします。
このとき、内部的には検索ワード「渋谷区」と指定したフィールドとの類似度から_scoreが計算されると思いますが、この_scoreの計算を無効にしたり、_scoreを0にしたりすることは可能でしょうか?
具体的にやりたいこととしては例えば、
- addressフィールドに検索ワード「渋谷区」が入っていたらスコアを1与える
- 得られた結果には_scoreが1と0の結果が入り混じっている
- _scoreの降順にソートすると、_scoreが1と0のグループに分かれる
- _scoreが1の中でupdated_atの降順にソート、0の中でupdated_atの降順にソートする
- それで得られた結果を最終結果とする
ということをやりたいです。
そのために、内部で計算される_scoreをコントロールする方法があれば知りたいです。
もしくは他の方法で実現できる(似たようなことができる)などあれば教えていただきたいです。
GET my_index/area/_search
{
"query": {
"bool": {
"must": [
{
"terms": {
"status": [
1,
2
]
}
},
{
"query_string": {
"fields": [
"name",
"description",
"address"
],
"default_operator": "AND",
"query": "渋谷区"
}
}
]
}
},
"sort": [
{
"_score": {
"order": "desc"
}
},
{
"updated_at": {
"order": "desc"
}
}
]
}
elasticsearchのバージョンは5.6です。