Kazuhiko
kazuh****@fdiar*****
2014年 9月 25日 (木) 16:54:05 JST
須藤さん、こんにちは。 On 25/09/2014 05:27, Kouhei Sutou wrote: >> http://mroonga.org/ja/docs/reference/full_text_search/boolean_mode.html >> には、 >> The asterisk serves as the truncation (or wildcard) operator. >> とありますが、前方一致、後方一致、中間一致のどれでも使えるものでしょうか? > > 前方一致だけに使えます。 了解です! >>> SELECT *, MATCH (content) AGAINST ("*" in boolean mode) AS score FROM >> diaries; >> +----+--------------------------------------------------+-------+ >> | id | content | score | >> +----+--------------------------------------------------+-------+ >> | 1 | It'll be fine tomorrow as well. | 1 | >> | 2 | It'll rain tomorrow. | 1 | >> | 3 | It's fine today. It'll be fine tomorrow as well. | 1 | >> | 4 | It's fine today. But it'll rain tomorrow. | 1 | >> | 5 | Ring the bell. | 0 | >> | 6 | I love dumbbells. | 0 | >> +----+--------------------------------------------------+-------+ >> >> '*'だけの結果も全く同じになりました。 > > どうしてでしょうねぇ。 > > SELECT *, > MATCH (content) AGAINST ("*" in boolean mode) AS score > FROM diaries > WHERE MATCH (content) AGAINST ("*" in boolean mode); > > でも同じ結果になりますか? なりました。 > あと! > 手元で試せたほうが嬉しいので「SELECT * FROM table」とかでデー > タを示してもらえるよりコピペして動かせる情報があると、とてもと > てもとてもうれしいです!(かずひこさんはわかってくれるはず。) ですよね! かたじけない! --compact --skip-extended-insert --add-drop-table な出力でいいかな。 DROP TABLE IF EXISTS `diaries`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `diaries` ( `id` int(10) unsigned NOT NULL, `content` text COLLATE utf8_unicode_ci, PRIMARY KEY (`id`), FULLTEXT KEY `content` (`content`) COMMENT 'parser "TokenBigram"' ) ENGINE=Mroonga DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; INSERT INTO `diaries` VALUES (1,'It\'ll be fine tomorrow as well.'); INSERT INTO `diaries` VALUES (2,'It\'ll rain tomorrow.'); INSERT INTO `diaries` VALUES (3,'It\'s fine today. It\'ll be fine tomorrow as well.'); INSERT INTO `diaries` VALUES (4,'It\'s fine today. But it\'ll rain tomorrow.'); INSERT INTO `diaries` VALUES (5,'Ring the bell.'); INSERT INTO `diaries` VALUES (6,'I love dumbbells.'); SELECT *, MATCH (content) AGAINST ("*" in boolean mode) AS score FROM diaries; parserは手元のデフォルトのTokenBigramだけれど、念の為コメントで明示して おきました。 >> Boolean Modeでの'*'の期待される仕様や制限について教えてくださると幸いです。 > > 前方一致で使えます。前方一致でないときは「*」そのものとして > 動きます。 このあたり、ドキュメントに詳しく書いたほうがよさそうですね。pull request を出せるように頑張ります。 かずひこ