本文へスキップ
`Ctrl`+`K`

# 7.15.4. `escalate`

Added in version 12.0.8.

## 7.15.4.1. 概要

注釈

この関数は実験的です。

これは、既存のマッチエスカレーションの仕組みと似ていますが、より一般的です。

マッチエスカレーションとは自動で条件のゆるい検索をする機能のことです。ヒット数が `match_escalation_threshold` で指定したしきい値よりも小さい時、自動で条件のゆるい検索をします。これがマッチエスカレーションです。

検索方法のエスカレーションについては 検索 を参照してください。

`match_escalation_threshold` は `select` の引数です。また、デフォルト値は `0` です。`match_escalation_threshold` については、 select を参照してください。

既存のマッチエスカレーションでは、一つの全文検索インデックスが対象です。そのため、例えば、厳密に検索するインデックスで検索して結果が取得できなかった場合、もう一度ゆるく検索するインデックスで検索を実行する必要がありました。この方法はオーバヘッドが大きい方法です。

しかし、 `escalate` は複数のインデックスにも対応しています。そのため、厳密に検索するインデックスを使った検索とゆるく検索するインデックスを使った検索を一つのクエリーで実行できます。`escalate` を使うことによって、オーバーヘッドを減らすことができます。

## 7.15.4.2. 構文

`escalate` は一つ以上の引数を持ちます。

>     escalate(CONDITION_1,
>              THRESHOLD_2, CONDITION_2,
>              ...,
>              THRESHOLD_N, CONDITION_N)

`CONDITION_N` と `THRESHOLD_N` はペアです。ただし、 `CONDITION_1` はペアとなるしきい値はありません。この条件は常に実行されるためです。

## 7.15.4.3. 使い方

使い方を示すために使うスキーマ定義とサンプルデータは以下の通りです。

サンプルスキーマ:

実行例:

    table_create Users TABLE_HASH_KEY ShortText
    # [[0,1337566253.89858,0.000355720520019531],true]
    column_create Users age COLUMN_SCALAR Int32
    # [[0,1337566253.89858,0.000355720520019531],true]
    table_create Ages TABLE_HASH_KEY Int32
    # [[0,1337566253.89858,0.000355720520019531],true]
    column_create Ages user_age COLUMN_INDEX Users age
    # [[0,1337566253.89858,0.000355720520019531],true]

サンプルデータ:

実行例:

    load --table Users
    [
    {"_key": "Alice",  "age": 12},
    {"_key": "Bob",    "age": 13},
    {"_key": "Calros", "age": 15},
    {"_key": "Dave",   "age": 16},
    {"_key": "Eric",   "age": 20},
    {"_key": "Frank",  "age": 21}
    ]
    # [[0,1337566253.89858,0.000355720520019531],6]

以下は簡単な使用例です。

実行例:

    select Users --filter "escalate('age >= 65', 0, 'age >= 60', 0, 'age >= 50', 0, 'age >= 40', 0, 'age >= 30', 0, 'age >= 20')"
    # [
    #   [
    #     0,
    #     1337566253.89858,
    #     0.000355720520019531
    #   ],
    #   [
    #     [
    #       [
    #         2
    #       ],
    #       [
    #         [
    #           "_id",
    #           "UInt32"
    #         ],
    #         [
    #           "_key",
    #           "ShortText"
    #         ],
    #         [
    #           "age",
    #           "Int32"
    #         ]
    #       ],
    #       [
    #         5,
    #         "Eric",
    #         20
    #       ],
    #       [
    #         6,
    #         "Frank",
    #         21
    #       ]
    #     ]
    #   ]
    # ]

## 7.15.4.4. 引数

### 7.15.4.4.1. `CONDITION_1`

`CONDITION_1` は必須です。

`CONDITION_1` に指定した条件は常に実行されます。そのため、 `CONDITION_1` はペアとなるしきい値を持ちません。

通常、最も検索結果を絞り込める条件を指定します。

`CONDITION_1` は "number_column > 29" のようなスクリプト構文の文字列です。

### 7.15.4.4.2. `CONDITION_N`

`CONDITION_N` は省略可能です。

一つ前の条件での検索結果がしきい値以下だった場合に、 `escalate` は `CONDITION_N` を評価します。

`CONDITION_N` は "number_column > 29" のようなスクリプト構文の文字列です。

### 7.15.4.4.3. `THRESHOLD_N`

`THRESHOLD_N` は省略可能ですが、 `CONDITION_N` がある場合は、 `THRESHOLD_N` は必須です。(ただし、 `CONDITION_1` はペアとなるしきい値はありません。)

`CONDITION_N-1` で検索した結果が `THRESHOLD_N` 以下の場合、 `escalate` は `CONDITION_N` を評価します。`CONDITION_N-1` で検索した結果が `THRESHOLD_N` より大きい場合、 `escalate` は `CONDITION_N` を評価しません。

`THRESHOLD_N` は `0` や `29` のような `0` 以上の正の整数です。

## 7.15.4.5. 戻り値

`escalate` は対象レコードがマッチしたかどうかを真偽値で返します。