# Query\_stringのスコアの計算をコントロールしたい

**URL:** https://discuss.elastic.co/t/query-string/133728
**Category:** 日本語による質問・議論はこちら
**Created:** [May 29, 2018, 5:15pm UTC](https://discuss.elastic.co/t/query-string/133728 "2018-05-29T17:15:24Z")
**Posts on this page:** 4
**Page:** 1

<div class="post-metadata">

### Author: ![yn2018](https://avatars.discourse-cdn.com/v4/letter/y/898d66/32.png) [@yn2018](https://discuss.elastic.co/u/yn2018)
#### Post date: [May 29, 2018, 5:15pm UTC](https://discuss.elastic.co/t/query-string/133728/1 "2018-05-29T17:15:25Z")

</div>

全文検索のために以下のようなquery\_stringを使ったクエリがあるとします。  
このとき、内部的には検索ワード「渋谷区」と指定したフィールドとの類似度から\_scoreが計算されると思いますが、この\_scoreの計算を無効にしたり、\_scoreを0にしたりすることは可能でしょうか？

具体的にやりたいこととしては例えば、

1. addressフィールドに検索ワード「渋谷区」が入っていたらスコアを1与える
2. 得られた結果には\_scoreが1と0の結果が入り混じっている
3. \_scoreの降順にソートすると、\_scoreが1と0のグループに分かれる
4. \_scoreが1の中でupdated\_atの降順にソート、0の中でupdated\_atの降順にソートする
5. それで得られた結果を最終結果とする

ということをやりたいです。

そのために、内部で計算される\_scoreをコントロールする方法があれば知りたいです。  
もしくは他の方法で実現できる（似たようなことができる）などあれば教えていただきたいです。

```auto
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です。

---

<div class="post-metadata">

### Author: ![johtani](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/johtani/32/44956_2.png) [@johtani](https://discuss.elastic.co/u/johtani)
#### Post date: [June 8, 2018, 4:49am UTC](https://discuss.elastic.co/t/query-string/133728/2 "2018-06-08T04:49:36Z")

</div>

[Function Score Query](https://www.elastic.co/guide/en/elasticsearch/reference/5.6/query-dsl-function-score-query.html)というので、スコアを色々と操作することができます。まずは、こちらを試してみてはいかがでしょうか？

---

<div class="post-metadata">

### Author: ![yn2018](https://avatars.discourse-cdn.com/v4/letter/y/898d66/32.png) [@yn2018](https://discuss.elastic.co/u/yn2018)
#### Post date: [June 18, 2018, 6:07am UTC](https://discuss.elastic.co/t/query-string/133728/3 "2018-06-18T06:07:03Z")

</div>

ありがとうございます！

- Function Score Queryでできました
- また、mustを使うと内部でデフォルトのスコア計算が行われてしまうので、filterに変更してスコア計算を行わないようにすることで今回の課題は解決しました

---

<div class="post-metadata">

### Author: ![system](https://us1.discourse-cdn.com/elastic/original/3X/1/a/1ac57faf039f6b580b3f104ef42a2a89e41014de.png) [@system](https://discuss.elastic.co/u/system)
#### Post date: [July 16, 2018, 6:07am UTC](https://discuss.elastic.co/t/query-string/133728/4 "2018-07-16T06:07:11Z")

</div>

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.
