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 |
+----------------+
| 東京特許許可局 |
+----------------+
どうでしょうか?ご意見頂ければ
よろしくお願いいたします。