8.9.1. QueryExpanderTSV

8.9.1.1. 概要

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

8.9.1.2. インストール

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

register query_expanders/tsv

8.9.1.3. 使い方

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

select --query "QUERY" --query_expansion QueryExpanderTSV

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

単語

同義語1

同義語2

groonga groonga Senna
mroonga mroonga groonga MySQL

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

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

select --query "groonga" --query_expansion QueryExpanderTSV

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

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

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

select --query "mroonga search" --query_expansion QueryExpanderTSV

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

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

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

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

単語

同義語

gronga groonga

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

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

select --query "gronga" --query_expansion QueryExpanderTSV

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

select --query "groonga" --query_expansion QueryExpanderTSV

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

8.9.1.4. TSVファイル

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

8.9.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 ファイルが使われます。

8.9.1.4.2. フォーマット

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

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

groonga(TAB)groonga(TAB)Senna

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

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

8.9.1.5. 制限

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

8.9.1.6. 参考