Kouhei Sutou
kou****@clear*****
2014年 6月 24日 (火) 15:02:17 JST
須藤です。 In <BAY17****@phx*****> "[groonga-dev,02440] 「GROUP BY」条件をmroonga_command()で再現する方法" on Sat, 21 Jun 2014 18:40:46 +0900, Kimura A <a.kim****@live*****> wrote: > Mroongaストレージエンジンからのmroonga_command()による全文検索を勉強中です。 > 今は、過去に「GROUP BY」を使って実装していた処理を、Groongaコマンドに移し替えようとして四苦八苦しています。 > 具体的には、たとえば以下のような処理を行いたいのですが、Groongaの--drilldownなり、他のオプションなりで実現できるでしょうか? SET NAMES utf8; CREATE TABLE t ( id int primary key auto_increment, name varchar(255), kana varchar(255) ) ENGINE = Mroonga DEFAULT CHARSET = utf8; INSERT INTO t (name, kana) VALUES ("トム", "とむ"); INSERT INTO t (name, kana) VALUES ("ジェリー", "じぇりー"); INSERT INTO t (name, kana) VALUES ("十夢", "とむ"); INSERT INTO t (name, kana) VALUES ("ミッキー", "みっきー"); INSERT INTO t (name, kana) VALUES ("トム", "とむ"); というスキーマとデータで SELECT *, count(id) AS c FROM t GROUP BY name ORDER BY kana ASC LIMIT 10; 相当のことをmroonga_commandで実現できるか?ということですね! ちょっと試してみたのですが、できませんでした。。。 本当は SELECT mroonga_command("select t --limit 0 --drilldown_limit 10 --drilldown_offset 0 --drilldown_output_columns _key,id,kana,_nsubrecs --drilldown name --drilldown_sortby kana") AS result; ポイントは--drilldown_sortbyで、整形するとこんな感じ: select t --limit 0 --drilldown_limit 10 --drilldown_offset 0 --drilldown_output_columns _key,id,kana,_nsubrecs --drilldown name --drilldown_sortby kana で動いて欲しいところなんですが、今の実装だ と--drilldown_sortbyに実カラムの指定をサポートしていませんで した。(_nsubrecsなど擬似カラムは指定できる。) 内部的には実カラムを参照するための情報を持っているので、それ らをつなぎあわせてやれば--drilldown_sortbyからも使えそうな雰 囲気を感じました。ちょっとつなぎあわせられるか試してみるので、 少々お待ちください! > もしこの処理がmroonga_command()では不可能な場合、 > ◯この部分だけ素のMySQLのままにするか、あるいは > ◯ソート用のカラムを別途追加して、kana値に追従させるか、 > といった代替案を考えています。 > この点についても、よりよい手段があるようであれば、ご示唆いただけると助かります。 とりあえず、MySQLのままでお願いします! もしかしたら、対応したのが今月のリリースに入るかもしれないの で、そのときはmroonga_commandでもいけるはずです! -- 須藤 功平 <kou****@clear*****> 株式会社クリアコード <http://www.clear-code.com/> Groongaサポート: http://groonga.org/ja/support/ パッチ採用: http://www.clear-code.com/recruitment/ コードリーダー育成支援: http://www.clear-code.com/services/code-reader/