Tatsuya Uemura
tatsu****@sa*****
2007年 3月 29日 (木) 15:57:06 JST
末永様 上村です。 ご回答ありがとうございました。 下記を参考に検討させて頂きます。 失礼いたします。 On Thu, 29 Mar 2007 15:32:59 +0900 Tasuku SUENAGA <a****@razil*****> wrote: > 末永です。 > > 現在、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*****> > > _______________________________________________ > Senna-dev mailing list > Senna****@lists***** > http://lists.sourceforge.jp/mailman/listinfo/senna-dev >