4.11. クエリ拡張#

Groongaの select コマンドは query_expander 引数を受付ます。これを使うとクエリ文字列を拡張することができます。

例えば、"theater"ではなく"theatre"で検索したとしましょう。クエリ拡張では"theater OR theatre"の結果を返します。このようなやりかたで検索漏れを減らせます。これはユーザーが本当にやりたかったことです。

4.11.1. 準備#

クエリ拡張を使うには、文書を格納するテーブルと検索文字列と置換文字列のペアを格納する置換テーブルを作る必要があります。置換テーブルでは主キーが元の文字列、ShortText型のカラムが置換後の文字列をあらわします。

それでは文書テーブルと置換テーブルを作成しましょう。

実行例:

table_create Doc TABLE_PAT_KEY ShortText
# [[0,1337566253.89858,0.000355720520019531],true]
column_create Doc body COLUMN_SCALAR ShortText
# [[0,1337566253.89858,0.000355720520019531],true]
table_create Term TABLE_PAT_KEY ShortText --default_tokenizer TokenBigram --normalizer NormalizerAuto
# [[0,1337566253.89858,0.000355720520019531],true]
column_create Term Doc_body COLUMN_INDEX|WITH_POSITION Doc body
# [[0,1337566253.89858,0.000355720520019531],true]
table_create Synonym TABLE_PAT_KEY ShortText
# [[0,1337566253.89858,0.000355720520019531],true]
column_create Synonym body COLUMN_VECTOR ShortText
# [[0,1337566253.89858,0.000355720520019531],true]
load --table Doc
[
{"_key": "001", "body": "Play all night in this theater."},
{"_key": "002", "body": "theatre is British spelling."},
]
# [[0,1337566253.89858,0.000355720520019531],2]
load --table Synonym
[
{"_key": "theater", "body": ["theater", "theatre"]},
{"_key": "theatre", "body": ["theater", "theatre"]},
]
# [[0,1337566253.89858,0.000355720520019531],2]

このようにすると、検索漏れは起こりません。これは置換テーブルがクエリ文字列として"theater"も"theatre"のいずれも受け付けるからです。