全文検索

http://web.archive.org/web/20020731095928/http://www.hippo2000.info/cgi-bin/KbWiki/KbWiki.pl?cmd=disp&page=MySQL%A4%CEFull+Text+Search%A4%F2%C6%FC%CB%DC%B8%EC%A4%CB%BB%C8%A4%A6%BC%C2%B8%B3

Perlのわざと読みにくくしてるんじゃないかと思うようなコードを見ながらPHPで書き直してみたんだけど・・。

    function getSearchEncoded($text){
        $ascii      = '[\x00-\x7F]';
        $twoBytes   = '[\x8E\xA1-\xFE][\xA1-\xFE]';
        $threeBytes = '\x8F[\xA1-\xFE][\xA1-\xFE]';
        $words = chasen_split($text);
        $search = '';
        foreach ($words as $word){
            preg_match_all("/$ascii|$twoBytes|$threeBytes/", $word, $matches, PREG_PATTERN_ORDER);

            $maps = array();
            foreach ($matches[0] as $match){
                $map = unpack('H*', trim($match));
                $maps[] = $map[1];
            }
            $search .= ' ' . implode('S', $maps);
        }
        return trim($search);
    }

あってるかどうかがさっぱり不明。。


取り敢えず全文検索が動くようにはなったものの、データが10件くらいじゃわからんー。しかも5件ほどに同じ単語が含まれてたら検索されなくなる。
これがインデックスが使われない場合というやつ?
ちょこちょこ同じようなデータを入れていってたら急に表示が0件になるからびびるというかまずいんじゃないかと思うんだけど・・。
hi is her とか検索しないようにするためなんかな。
千件や一万件くらいならlikeでいいような気がするから深入りしないでおこう。