# 7.3.23. `index_column_diff`

## 7.3.23.1. 概要

バージョン 9.0.1 で追加.

`index_column_diff` コマンドはインデックスが破損しているかどうかをチェックします。

このコマンドによって、既に破損したインデックスを発見できます。通常、壊れたインデックスはGroongaが参照や削除、更新をしない限り発見できません。壊れたインデックスを使うとGroongaがクラッシュしたり、誤った検索結果を返すことがあります。そのため、事前にインデックスの破損を発見したくなります。このコマンドはこのようなケースで有用です。

注釈

このコマンドは、対象のインデックスのサイズによっては、多くのメモリーや実行時間を使うことがあります。また、このコマンドを実行中に停止した場合は、対象のインデックスが壊れることがあります。そのため、現用系のシステムで実行するのではなく、予備系のシステムで実行することをおすすめします。

## 7.3.23.2. 構文

このコマンドの引数は2つで必須です。:

    index_column_diff table index_column

## 7.3.23.3. 使い方

以下はインデックスカラムをチェックする例です。:

実行例:

    table_create Data TABLE_HASH_KEY ShortText
    # [[0,1612416118.30525,0.003424882888793945],true]
    table_create Terms TABLE_PAT_KEY ShortText \
      --default_tokenizer TokenNgram \
      --normalizer NormalizerNFKC130
    # [[0,1612416136.049046,0.003507614135742188],true]
    load --table Data
    [
    {"_key": "Hello World"},
    {"_key": "Hello Groonga"}
    ]
    # [[0,1612416155.418526,0.3676469326019287],2]
    column_create \
      --table Terms \
      --name data_index \
      --flags COLUMN_INDEX|WITH_POSITION \
      --type Data \
      --source _key
    # [[0,1612416424.515037,0.00576472282409668],true]
    truncate Terms.data_index
    # [[0,1612416439.925894,0.009646892547607422],true]
    load --table Data
    [
    {"_key": "Good-by World"},
    {"_key": "Good-by Groonga"}
    ]
    # [[0,1612416450.429434,1.51789665222168],2]
    index_column_diff Terms data_index
    # [
    #   [
    #     0,
    #     1612416577.921113,
    #     0.006278038024902344
    #   ],
    #   [
    #     {
    #       "token": {
    #         "id": 2,
    #         "value": "hello"
    #       },
    #       "remains": [
    #       ],
    #       "missings": [
    #         {
    #           "record_id": 1,
    #           "position": 0
    #         },
    #         {
    #           "record_id": 2,
    #           "position": 0
    #         }
    #       ]
    #     },
    #     {
    #       "token": {
    #         "id": 3,
    #         "value": "world"
    #       },
    #       "remains": [
    #       ],
    #       "missings": [
    #         {
    #           "record_id": 1,
    #           "position": 1
    #         }
    #       ]
    #     },
    #     {
    #       "token": {
    #         "id": 1,
    #         "value": "groonga"
    #       },
    #       "remains": [
    #       ],
    #       "missings": [
    #         {
    #           "record_id": 2,
    #           "position": 1
    #         }
    #       ]
    #     }
    #   ]
    # ]

## 7.3.23.4. 引数

このセクションではすべての引数について説明します。

### 7.3.23.4.1. `table`

チェックするインデックスカラムを含むテーブルの名前を指定します。

### 7.3.23.4.2. `index_column`

チェック対象のインデックスカラムの名前を指定します。

## 7.3.23.5. 戻り値

`index_column_diff` コマンドはインデックスチェックの結果を返します。:

    [HEADER, CHECK_RESULT]

`HEADER`

`HEADER` については 出力形式 を参照してください。

`CHECK_RESULT`

このコマンドは、以下のように、このコマンドを実行した時のトークナイズの結果と、現在のインデックスカラムの値を比較した結果を返します。

    {
      "token": {
        "id": TOKEN_ID,
        "value": TOKEN_VALUE
      },
      "remains": [
        {
          "record_id": RECORD_ID
        }
      ],
      "missings": [
        {
          "record_id": RECORD_ID,
          "position": POSITION
        }
      ]
    }

`remains` になにか出力された場合、Groongaが本来削除するはずだったトークンがインデックスが残っています。

`missing` になにか出力された場合、本来インデックス内に残っているトークンが削除されています。

インデックスの破損が無い時は、以下のように `index_column_diff` は何も返しません。

    index_column_diff --table table --name index_column
    [[0,0.0,0.0],[]]

### 7.3.23.5.1. `TOKEN_ID`

`TOKEN_ID` は壊れたトークンのIDです。

### 7.3.23.5.2. `TOKEN_VALUE`

`TOKEN_VALUE` は壊れたトークンの値です。

### 7.3.23.5.3. `RECORD_ID`

`RECORD_ID` は壊れたトークンを含むレコードです。

### 7.3.23.5.4. `POSITION`

`POSITION` 壊れたトークンの出現位置です。