全文検索エンジン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"]]]]]
マニュアル読んだ限りだと両方とも結果返ってこない、だと思って試しにやってみたら片方は結果返ってきたので「何で?」状態なのです、、、。