`Ctrl`+`K`

# 7.10.1. QueryExpanderTSV

## 7.10.1.1. 概要

`QueryExpanderTSV` はクエリー展開プラグインです。同義語はTSV（データをタブで区切るファイルフォーマット）ファイルから読み込みます。このプラグインは組み込みのクエリー展開機能よりも機能が少ないです。例えば、単語の正規化をサポートしていません。しかし、TSVファイルで同義語を管理できるためこちらの方が使いやすいかもしれません。TSVファイルなのでExcelなどの表計算ソフトで同義語を編集できます。組み込みのクエリー展開機能では、Groongaのテーブルとして同義語を管理します。

## 7.10.1.2. インストール

`QueryExpanderTSV` を使う前に `query_expanders/tsv` をプラグインとして登録します:

    plugin_register query_expanders/tsv

## 7.10.1.3. 使い方

`select` コマンドに `--query_expander QueryExpanderTSV` パラメーターを追加します:

    select --query "QUERY" --query_expander QueryExpanderTSV

`QUERY` 内に登録済みの同義語がある場合はそれらが展開されます。例えば、以下の同義語があるとします。

単語 | 同義語1 | 同義語2
--- | --- | ---
groonga | groonga | Senna
mroonga | mroonga | groonga MySQL

この表は、 `単語` の同義語は `同義語1` と `同義語2` という意味です。例えば、 `groonga` の同義語は `groonga` と `Senna` です。また、 `mroonga` の同義語は `mroonga` と `groonga MySQL` です。

クエリーが `groonga` のときのクエリー展開の例です:

    select --query "groonga" --query_expander QueryExpanderTSV

上記のコマンドは以下のコマンドと同じ意味です:

    select --query "groonga OR Senna" --query_expander QueryExpanderTSV

クエリーが `mroonga search` のときのクエリー展開の例です:

    select --query "mroonga search" --query_expander QueryExpanderTSV

上記のコマンドは以下のコマンドと同じ意味です:

    select --query "(mroonga OR (groonga MySQL)) search" --query_expander QueryExpanderTSV

登録されている単語だけ（ここでは `groonga` と `mroonga` ）クエリー展開されて、登録されていない単語（ここでは `search` ）はクエリー展開されていないことが大事なポイントです。また、再帰的にクエリー展開しません。クエリー展開した結果の `(mroonga OR (groonga MySQL))` の中に `groonga` がありますが、これは展開されません。

通常、同義語の中に `単語` 自身も含める必要があります。例えば、 `groonga` と `mroonga` が同義語の中に含まれています。もし、 `単語` 自身を無視したい場合は同義語の中に `単語` を含めないでください。例えば、クエリー展開機能をスペル訂正機能として使う場合は、以下のような同義語を使ってください。

単語 | 同義語
--- | ---
gronga | groonga

`単語` の `gronga` には誤字があります。 `o` がひとつ足りません。 `同義語` の `groonga` が正しい単語です。

スペル訂正機能としてクエリー展開機能を使う例です:

    select --query "gronga" --query_expander QueryExpanderTSV

上記のコマンドは以下のコマンドと同じ意味です:

    select --query "groonga" --query_expander QueryExpanderTSV

前者のコマンドは `--query` の値に誤字がありますが、後者のコマンドは誤字がありません。

## 7.10.1.4. TSVファイル

同義語はTSVフォーマットのファイルで定義します。このセクションでは定義方法について説明します。

### 7.10.1.4.1. 場所

TSVファイルのファイル名は `synonyms.tsv` で、設定ディレクトリに置かなければいけません。例えば、 `/etc/groonga/synonyms.tsv` がTSVファイルの場所になります。場所はビルド時に決まります。

環境変数 `GRN_QUERY_EXPANDER_TSV_SYNONYMS_FILE` を指定することで実行時に場所を変更することもできます:

    % env GRN_QUERY_EXPANDER_TSV_SYNONYMS_FILE=/tmp/synonyms.tsv groonga

上述のコマンドでは `/tmp/synonyms.tsv` ファイルが使われます。

### 7.10.1.4.2. フォーマット

TSVファイル内に0個以上の同義語を定義することができます。1行につき `単語` と `同義語リスト` のペアを定義します。 `--query` の値の中にでてきた `単語` は `同義語リスト` に展開されます。 `同義語リスト` は `OR` でまとめます。例えば、同義語リスト `groonga` と `Senna` は `groonga OR Senna` と展開されます。

最初のカラムが `単語` で、残りのカラムが `単語` の `同義語リスト` になります。以下は、 `単語` が `groonga` で、 `同義語リスト` が `groonga` と `synonyms` の例です。 `(TAB)` はタブ文字（ `U+0009` ）という意味です:

    groonga(TAB)groonga(TAB)Senna

コメント行をサポートしています。 `#` から始まる行は無視します。以下はコメント行の例です。 `groonga` とある行はコメント行として無視されます:

    #groonga(TAB)groonga(TAB)Senna
    mroonga(TAB)mroonga(TAB)groonga MySQL

## 7.10.1.5. 制限

同義語を再読み込みするにはgroongaを再起動する必要があります。TSVファイルはプラグイン読み込み時に一度だけ読み込みます。

## 7.10.1.6. 参考

> - 詳細については query_expander を参照してください。