Bug #1318

SELECT COUNT(*)時に数値が取れない

Added by Kentoku SHIBA almost 6 years ago. Updated almost 6 years ago.

Status:完了チェック待ちStart date:03/28/2012
Priority:NormalDue date:
Assignee:Kentoku SHIBA% Done:

80%

Category:-
Target version:-

Description

SELECT COUNT(*) FROM table WHERE MATCH(column) AGAINST('+D keyword') とした場合、正しく数値が取得できません。

SELECT COUNT(column) FROM table WHERE MATCH(column) AGAINST('+D keyword') とすると数値が取得できます。

root@localhost:test_db>SELECT COUNT(*) AS count FROM table WHERE MATCH (text) AGAINST ('*D+ keyword' IN BOOLEAN MODE);
+-------+
| count |
+-------+
| 0 |
+-------+
1 row in set (0.16 sec)


root@localhost:test_db>SELECT COUNT(text) AS count FROM table WHERE MATCH (text) AGAINST ('*D+ keyword' IN BOOLEAN MODE);
+--------+
| count |
+--------+
| 383961 |
+--------+
1 row in set (0.80 sec)


root@localhost:test_db>SELECT COUNT(*) AS count FROM table WHERE MATCH (text) AGAINST ('*D+ keyword' IN BOOLEAN MODE);
+-------+
| count |
+-------+
| 0 |
+-------+
1 row in set (0.18 sec)

テーブル定義は以下

CREATE TABLE search_texts (
id bigint(20) NOT NULL,
text text,
cdate datetime NOT NULL,
mdate datetime NOT NULL,
PRIMARY KEY (id),
KEY idx_search_texts (cdate),
FULLTEXT KEY fu_search_texts (text)
) ENGINE=mroonga DEFAULT CHARSET=utf8

システムは CentOS5.7 MySQL 5.5.21 mroonga-2.01 gronga-2.0.0

History

#1 Updated by Kentoku SHIBA almost 6 years ago

  • Status changed from 新規 to 完了チェック待ち
  • % Done changed from 0 to 80

count skip時、最初の1レコードはgroongaから取得してMySQL側に返すはずだったが、 それができておらず、他で利用した値がそのまま引きずられて利用されることがあった。 このため、MySQL側で返却された値が検索条件に合致しないとして捨てられ 結果的に0件検索となっていた。

対処としては、count skip時、最初の1レコードはgroongaから取得してMySQL側に 返却するようにした。

Also available in: Atom PDF