Tatsuya Uemura
tatsu****@sa*****
2007年 3月 29日 (木) 14:04:53 JST
お世話になります。 上村と申します。 tritonn-1.0.1+mysql-5.0.37+senna-1.0.3を使用しているのですが、 スニペット機能ついてご相談させて下さい。 複数カラムにFULLTEXT INDEXを使用した場合の動作についてなのですが。 CREATE TABLE t2 (c1 TEXT,c2 TEXT, FULLTEXT INDEX ft USING NGRAM (c1,c2)) ENGINE = MyISAM DEFAULT CHARSET ujis; INSERT INTO t2 VALUES ("すもももももももものうち","あああああ"); INSERT INTO t2 VALUES ("生麦生米生卵","いいいいい"); INSERT INTO t2 VALUES ("東京特許許可局","うううううう"); mysql> select snippet(c1, 100, 1, 'ujis', 1,'...','...</br>','東京','<b>','</b>')as sni FROM t2 WHERE MATCH(c1,c2) AGAINST('東京'); +----------------------------------+ | sni | +----------------------------------+ | ...<b>東京</b>特許許可局...</br> | +----------------------------------+ 1 row in set (0.00 sec) 上記はいいのですが、 mysql> select snippet(c2, 100, 1, 'ujis', 1,'...','...</br>','東京','<b>','</b>')as sni FROM t2 WHERE MATCH(c1,c2) AGAINST('東京'); +-----+ | sni | +-----+ | | +-----+ 1 row in set (0.01 sec) となります。 当たり前と言えばそうなのですが、何かいい解決案はありますでしょうか? 又、スニペット機能を複数カラムにINDEXを張って使うと言うのがそもそもNGで しょうか? 以下の様な結果が帰ってくればありがく思っておりますが、 mysql> select snippet(c1, 100, 1, 'ujis', 1,'...','...</br>','東京','<b>','</b>')as sni FROM t2 WHERE MATCH(c1,c2) AGAINST('東京'); +----------------+ | sni | +----------------+ | 東京特許許可局 | +----------------+ 以下の感じで強引にやるしかないでしょうか? mysql> select case when length(snippet(c1, 100, 1, 'ujis', 1,'...','...</br>','うう','<b>','</b>'))!=0 then snippet(c1, 100, 1, 'ujis', 1,'...','...</br>','うう','<b>','</b>') else c1 end sni FROM t2 WHERE MATCH(c1,c2) AGAINST('うう'); +----------------+ | sni | +----------------+ | 東京特許許可局 | +----------------+ どうでしょうか?ご意見頂ければ よろしくお願いいたします。