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

Back to archive index

Kimura A a.kim****@live*****
2014年 6月 21日 (土) 18:40:46 JST


木村です。

Mroongaストレージエンジンからのmroonga_command()による全文検索を勉強中です。
今は、過去に「GROUP BY」を使って実装していた処理を、Groongaコマンドに移し替えようとして四苦八苦しています。
具体的には、たとえば以下のような処理を行いたいのですが、Groongaの--drilldownなり、他のオプションなりで実現できるでしょうか?

テーブル:t
カラム:id(INT), name(VARCHAR), kana(CHAR)

の中に、以下のようなレコードが存在するとします。

[
{id:1, name:"トム", kana:"とむ"},
{id:2, name"ジェリー":, kana:"じぇりー"},
{id:3, name:"十夢", kana:"とむ"},
{id:4, name:"ミッキー", kana:"みっきー"},
{id:5, name:"トム"0, kana:"とむ"}
]

やりたいことは、「nameカラムでグループ化した検索結果を、kanaカラム値の順に全カラム取得すること」です。
素のMySQLでは、たとえば以下のようにして実装していました。

SELECT *,count(id) AS c FROM t GROUP BY name ORDER BY kana ASC LIMIT 10;

結果は以下のような感じになります。

[
{id:2, name:"ジェリー",kana:"じぇりー", c:1},
{id:1, name:"トム", kana:"とむ", c:2},
{id:3, name:"十夢":, kana:"とむ", c:1},
{id:4, name:"ミッキー", kana:"みっきー", c:1}
]

こんな感じの挙動を--drilldownで実現しようとして、あれこれ試行錯誤してみたのですが、

SELECT mroonga_command(
"select t --drilldown_limit 10 --drilldown_offset 0 --output_columns --drilldown_output_columns id,name,kana,_id,_key,_nsubrecs --drilldown name --limit 0"
) AS result

などとやってみても、結果のJSON文字列には_id, _key(=nameカラム値), _nsubrecsの3カラムしかなく、kanaカラムによる並べ替えも効かないようです。
さしあたり、この「kanaカラムによる並べ替え」だけでも実現したいと思っているのですが…。

もしこの処理がmroonga_command()では不可能な場合、
◯この部分だけ素のMySQLのままにするか、あるいは
◯ソート用のカラムを別途追加して、kana値に追従させるか、
といった代替案を考えています。
この点についても、よりよい手段があるようであれば、ご示唆いただけると助かります。

どうぞよろしくお願いしますm(_ _)m
 		 	   		  



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