[groonga-dev,02805] Re: Boolean Modeの*の仕様

Back to archive index

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
を出せるように頑張ります。

かずひこ




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