MySQLには全文検索を行える機能がついてるのだけど、何らかのパッチを当てたり、違うシステムを組み込まないとマルチバイト文字(日本語もマルチバイ ト文字)が使えないのです。
さらに、MySQLの全文検索は結構制限があって、
「検索文字は4文字以上」
「50%以上のレコードがヒットすると、結果を返さない」
というちょっとひどい仕様になっています。
で、どうにかして「マルチバイト文字」の全文検索を「パッチを当てず」に使用したい。
50%の制限は、「IN BOOLEAN MODE」って指定をすると解除されるので問題ないのだけど、4文字制限がちときつい。
で、結構力技な方法を考えた。
以下が具体的な方法。
1)FULLTEXTインデックスをはるカラムはLONGTEXTなどの大容量にしておく
2)検索対象文字列を1文字ずつばらばらにしMD5でハッシュにする
3)ハッシュを半角スペースで区切りカラムに保存
というように、結構簡単に「マルチバイト文字列」で「全文検索」が実現可能だった。ただしめちゃくちゃ容量を食うけどね。
日本語で1文字の検索でもハッシュ化すると半角32文字まで増えるのでMySQLの制限もクリア。
ハッシュ化する関数。引数$sourceはハッシュ化対象文字列。ちなみにエンコードはUTF-8です。
function make_search_token( $source )
{
$chars = preg_split( '//u', $source );
$temp_token = array();
foreach( $chars AS $char ) {
$temp_token[] = md5( $char );
}
return implode( ' ', $temp_token );
}
多分、AND検索などの細かい指定は出来ないけど、ちょっと使う分には簡単で、便利だと思うがどうだろうか?