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