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

アーカイブの一覧に戻る

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            |
+----------------+
| 東京特許許可局 |
+----------------+

どうでしょうか?ご意見頂ければ
よろしくお願いいたします。




Senna-dev メーリングリストの案内
アーカイブの一覧に戻る