モノノフ日記

普通の日記です

全文検索エンジンgroongaをさわってます

全文検索に使おうと思ってgroongaを最近さわっています。
大体のことは本家のドキュメントを見ながらやれば出来ました。日本語ドキュメント最高です。

ちょっと挙動がわからないところがあったので1点メモ。
COLUMN_SCALARで定義してるカラムに全文検索のインデックスを作ってる別テーブル(名前をarticleとします)を型として宣言して検索するとき、

"--query article.name:@東京"

だと検索できるけど、下のコマンドだとノーヒット。

"--match_columns article.name --query 東京"

んー、記法が違うだけで同じことやってると思ったんだけど違うのかな。

追記

実際にスキーマ使って説明しないとよくわからないので再現スキーマを書きます。
groongaのバージョンは1.3.0を使っています。

まずスキーマ定義
> table_create momoclo TABLE_HASH_KEY ShortText
> table_create from_pref TABLE_HASH_KEY ShortText
> table_create bigram TABLE_PAT_KEY|KEY_NORMALIZE ShortText --default_tokenizer TokenBigram

> column_create from_pref name COLUMN_SCALAR ShortText

> column_create momoclo name COLUMN_SCALAR ShortText
> column_create momoclo from_pref COLUMN_SCALAR from_pref

> column_create bigram pref_index COLUMN_INDEX|WITH_POSITION from_pref name
挿入するデータ
load --table momoclo
[
{"_key": "pink", "name": "佐々木彩夏", "from_pref": "2"},
{"_key": "red", "name": "百田夏菜子", "from_pref": "4"},
{"_key": "purple", "name": "高城れに", "from_pref": "2"},
{"_key": "yellow", "name": "玉井詩織", "from_pref": "2"},
{"_key": "green", "name": "有安杏果", "from_pref": "3"},
]

load --table from_pref
[
{"_key": "1", "name": "東京都"},
{"_key": "2", "name": "神奈川県"},
{"_key": "3", "name": "埼玉県"},
{"_key": "4", "name": "静岡県"},
]
queryで全文検索

momocloテーブルのfrom_pref.nameに--queryを利用した全文検索すると結果が返ってきます。

> select momoclo --query from_pref.name:@埼
[[0,1329493671.13354,0.000860929489135742],[[[1],[["_id","UInt32"],["_key","ShortText"],["from_pref","from_pref"],["name","ShortText"]],[5,"green","3","有安杏果"]]]]

match_columnsで全文検索

match_columnsで書くとノーヒット。

> select momoclo --match_columns from_pref.name --query 埼
[[0,1329493738.70121,4.79221343994141e-05],[[[0],[["_id","UInt32"],["_key","ShortText"],["from_pref","from_pref"],["name","ShortText"]]]]]

マニュアル読んだ限りだと両方とも結果返ってこない、だと思って試しにやってみたら片方は結果返ってきたので「何で?」状態なのです、、、。