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 壊れたトークンの出現位置です。