[groonga-dev,02444] Re: 「GROUP BY」条件をmroonga_command()で再現する方法

Back to archive index

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/




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