Horikoshi Yuki
horik****@gmail*****
2011年 11月 8日 (火) 13:38:49 JST
初めて投稿します。堀越と申します。
以下の環境にてLIMITを使ったクエリにおいて
結果がズレてしまう(?)現象がありましたので報告します。
環境)
CentOS 5.7 (64bit)
groonga.x86_64 1.2.7-0
mysql-groonga.x86_64 1.0.1-0
groonga_default_parser TokenBigramIgnoreBlankSplitSymbolAlphaDigit
SCHEMA)
CREATE TABLE test_table (
id int unsigned not null auto_increment primary key,
word text,
year int unsigned,
fulltext key(word),
key(year)
)engine = groonga;
DATA)
INSERT INTO test_table (word,year) VALUES
('あ',1980),('あい',1981),('あいう',1982),('か',1983),
('あいうえ',1977),('あいうえお',1976),('あお',1966),('かき',1988);
正常)
mysql> SELECT * FROM test_table WHERE MATCH(word) AGAINST ('あ') ORDER BY year;
+----+-----------------+------+
| id | word | year |
+----+-----------------+------+
| 7 | あお | 1966 |
| 6 | あいうえお | 1976 |
| 5 | あいうえ | 1977 |
| 1 | あ | 1980 |
| 2 | あい | 1981 |
| 3 | あいう | 1982 |
+----+-----------------+------+
6 rows in set (0.01 sec)
異常)
mysql> SELECT * FROM test_table WHERE MATCH(word) AGAINST ('あ') ORDER
BY year LIMIT 0,10;
+----+-----------------+------+
| id | word | year |
+----+-----------------+------+
| 7 | あお | 1966 |
| 7 | あお | 1966 | ← id 7が重複
| 6 | あいうえお | 1976 | ←id 5が除外
| 1 | あ | 1980 |
| 2 | あい | 1981 |
| 3 | あいう | 1982 |
+----+-----------------+------+
6 rows in set (0.01 sec)
また、関連があるかわかりませんが
SQL_CALC_FOUND_ROWSを使った際も結果値が期待値と異なります。
正常)
mysql> SELECT SQL_CALC_FOUND_ROWS * FROM test_table WHERE MATCH(word)
AGAINST ('あ') ORDER BY year;
〜中略〜
mysql> SELECT FOUND_ROWS();
→6
異常)
mysql> SELECT SQL_CALC_FOUND_ROWS * FROM test_table WHERE MATCH(word)
AGAINST ('あ') ORDER BY year LIMIT 5;
〜中略〜
mysql> SELECT FOUND_ROWS();
→5
こちらの環境では100%の再現性があるようでしたが、
他に必要な情報などあればお知らせください。
ご確認(可能であればご対応の程)何卒よろしくお願いいたします。
--
Yuki Horikoshi <horik****@gmail*****>