Kouhei Sutou
kou****@clear*****
2012年 6月 4日 (月) 19:47:10 JST
須藤です。 In <CABp+****@mail*****> "[groonga-dev,00916] select count(*) で正しい件数がとれない" on Sun, 3 Jun 2012 13:59:39 +0900, Jun Nishikawa <topaz****@m0n0m*****> wrote: > mroonga 導入の為検証をしているのですが、 > 特定の条件で select count(*) の値が必ずずれます。 > > この現象は下記チケットが close すれば治るという理解でよろしいでしょうか? > http://redmine.groonga.org/issues/1318 あ、いえ、このチケットの問題は修正済みです。 (私が変更の詳細をまだ確認していないのでcloseになっていない だけです。) > 環境は以下の通りです。 > $ facter lsbdistdescription > Ubuntu 12.04 LTS > $ aptitude show mysql-server-mroonga mysql-server | grep Version > Version: 2.03-1 > Version: 5.5.22-0ubuntu1 > 以下、再現手順です。 ありがとうございます! chroot環境下ですが、試してみました! が、再現しませんでした。。。 # facter lsbdistdescription Ubuntu 12.04 LTS # LANG=C aptitude show mysql-server-mroonga mysql-server | grep Version Version: 2.03-1 Version: 5.5.22-0ubuntu1 terminal 1: mysql> CREATE TABLE `test` ( `id` int(11) NOT NULL, `culture` varchar(7) COLLATE utf8_unicode_ci NOT NULL, `name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, `description` text COLLATE utf8_unicode_ci, `tags` text COLLATE utf8_unicode_ci, PRIMARY KEY (`id`,`culture`) USING BTREE, FULLTEXT KEY `name_description` (`name`,`description`), FULLTEXT KEY `tags` (`tags`) ) ENGINE=mroonga DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='engine "innodb"'; Query OK, 0 rows affected, 2 warnings (0.43 sec) mysql> insert into test values (1, 'ja', 'ワンピース', '1巻', 'ワンピース'); Query OK, 1 row affected (0.06 sec) mysql> insert into test values (1, 'en', 'One Piece', 'Volume 1', 'Manga'); Query OK, 1 row affected (0.05 sec) terminal 2: mysql> start transaction; Query OK, 0 rows affected (0.00 sec) mysql> insert into test values (2, 'ja', 'ワンピース', '2巻', 'ワンピース'); Query OK, 1 row affected (0.00 sec) terminal 1: mysql> select count(*) from test WHERE culture='ja' AND MATCH (test.TAGS) AGAINST ('+ワンピース' IN BOOLEAN MODE) AND MATCH (test.NAME, test.DESCRIPTION) AGAINST ('+ ワンピース' IN BOOLEAN MODE); +----------+ | count(*) | +----------+ | 1 | +----------+ 1 row in set (0.02 sec) terminal 2: mysql> commit; Query OK, 0 rows affected (0.04 sec) terminal 1: mysql> select count(*) from test WHERE culture='ja' AND MATCH (test.TAGS) AGAINST ('+ワンピース' IN BOOLEAN MODE) AND MATCH (test.NAME, test.DESCRIPTION) AGAINST ('+ワンピース' IN BOOLEAN MODE); +----------+ | count(*) | +----------+ | 2 | +----------+ 1 row in set (0.00 sec) mysql> select * from test; +----+---------+-----------------+-------------+-----------------+ | id | culture | name | description | tags | +----+---------+-----------------+-------------+-----------------+ | 1 | en | One Piece | Volume 1 | Manga | | 1 | ja | ワンピース | 1巻 | ワンピース | | 2 | ja | ワンピース | 2巻 | ワンピース | +----+---------+-----------------+-------------+-----------------+ 3 rows in set (0.00 sec) うーん、何が違うんですかねぇ。。。 念のため、MySQLを再起動してみてもらえますか? -- 須藤 功平 <kou****@clear*****> 株式会社クリアコード <http://www.clear-code.com/> (03-6231-7270) groongaサポート: http://groonga.org/ja/support/ プログラミングが好きなソフトウェア開発者を募集中: http://www.clear-code.com/recruitment/