2

年齢が 40 で、住んでいる州の「ID」がなく、残高が 20000 以上で残高が 30000 以下の顧客を返すクエリがあります。

クエリは次のようになります。

POST /bank/_search?pretty
{
  "query": {
    "bool": {
      "must": [
        { "match": { "age": "40" } }
      ],
      "must_not": [
        { "match": { "state": "ID" } }
      ],
      "filter": {
        "range": {
          "balance": {
            "gte": 20000,
            "lte": 30000
          }
        }
      }
    }
  }
}

すべての結果ドキュメントは同等に関連していると思いますが、elasticsearch は各ドキュメントに異なるスコアを割り当てました。サンプル結果: https://jsonblob.com/57de6b37e4b0dc55a4f67d54

「一致」クエリを使用しているため、スコアが来ることはわかっています。誰でも言うことができます:-

  1. 「一致」を回避し、フィルターのみを使用してこのクエリを実行することは可能ですか? age=40 と state="ID" を入れて考えているので、結果セットをフィルタリングしているだけです。

  2. このシナリオでは上記のクエリでは不要なので、このスコア計算を回避できますか?

  3. これらのドキュメントのスコアが異なるのはなぜですか。ドキュメントがこのクエリに一致するか、または一致しないかのいずれかを返す必要があるクエリは非常に単純であるように思われるためです。ぴったり合うとか、少し合うとか、そんなことはありません。

4

1 に答える 1