[groonga-dev,00601] LIMIT使用時の異常について

Back to archive index

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*****>




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