groonga 前方一致、後方一致

2014年4月23日更新 view: 60 view
photoBy: https://fbcdn-profile-a.akamaihd.net/hprofile-ak-…

前方一致、後方一致がうまく動かない

名古屋* を検索したいのだが、北名古屋市までひっかかる。
では、名古屋市中村区を拾うにはどうすればいいか?

参考
http://qiita.com/groonga/items/d8db64171aa01d60d206

原因は mecab

mecabを使わない場合は機械的に文字を検索するが、mecabを使ってることによってひっかからんみたい。

mecabを使うのやめる

指定したフィールドだけ、mecabを使いませんよ!
まずは off_parser_city を作る。

そして、cityフィールドを、mecabを使わない off_parser_city フィールドにコピーする。

スポンサードリンク
update qjiin_geos set off_parser_city=city

たったこれだけで全レコードがコピーされる

この方法はバグ?壊れた?、文字列をフルテキストインデックスを貼って検索しても引っかからない場合にも有効です。
新しくフィールドを作り、まるまるコピー。
古い方のフィールド名を hoge にしておいて、 新しい方を リネーム。
最後に hoge を削除すると検索にひっかかるようになります。

fulltextindexを貼る

FULLTEXT INDEX (off_parser_city) COMMENT 'parser "off"'

早速検索

SELECT * FROM test WHERE MATCH(off_parser_city) AGAINST('名古屋*' IN BOOLEAN MODE);

これでさっきまで 北名古屋市 にひっかっていたのが、名古屋*だけにひっかかるようになります。

スポンサードリンク

関連記事

関連カテゴリ