[Senna-dev 531] Re: スニペット機能について

Back to archive index

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
> 




Senna-dev メーリングリストの案内
Back to archive index