Tasuku SUENAGA
a****@razil*****
2007年 3月 29日 (木) 15:32:59 JST
末永です。 現在、MySQLでのsnippet機能は検索部分と全く連携していません。 よって、ご指摘のようにIFで切り替えてもらうか、 もしくはconcatで連結してもらえると希望の結果が得られると思います。 concatは、 select snippet(concat(c1, c2), 100, 1, 'ujis', 1, '...','...</br>','東京','<b>','</b>') as sni でも、 select concat(snippet(c1, 100, 1, 'ujis', 1, '...','...</br>','東京','<b>','</b>'), snippet(c2, 100, 1, 'ujis', 1, '...','...</br>','東京','<b>','</b>')) as sni でもよいとは思いますが、 前者のほうがパフォーマンスが発揮されると思います。 c2の結果にc1の結果のゴミが混じる場合には、 concat(c1, ' 'をいっぱい, c2) として、得られた結果からスペースを削ったりするとよいと思います。 いずれの方法も強引だとは思いますが… Tatsuya Uemura wrote: > お世話になります。 > 上村と申します。 > > 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 | > +----------------+ > | 東京特許許可局 | > +----------------+ > > どうでしょうか?ご意見頂ければ > よろしくお願いいたします。 --- Tasuku SUENAGA <a****@razil*****>