Kimura A
a.kim****@live*****
2014年 7月 8日 (火) 14:45:58 JST
木村です。須藤さんどうもありがとうございます。 > であれば、nameとkanaを合わせてプライマリーキーにするのがよい > と思います! なんとそんな手が…。GroongaというよりMySQLの話になってくるようですね。 複数カラムでプライマリーキーを作るのも初めての経験です。おかげさまで勉強になりっ放しです(~△~;) > select t > --limit 0 > --drilldown name_kana > --drilldown_limit 10 > --drilldown_output_columns name,kana,_nsubrecs > --drilldown_sortby kana これでほぼ思うようなデータが取れることを確認しました。 ただ取得されるレコードの中に、以下のような「name_kanas.kana値が空のレコード」が含まれてしまいますね。 トム, , 1 // ←この行 ジェリー, じぇりー, 1 十夢, じゅうむ, 1 … なので、あとは素のMySQLクエリの中の >> WHERE t.kana IS NOT NULL というWHERE句をどう再現するか、という問題だけだと思います。 将来的に、kana値が「あ」で始まるものだけを取得、などといった応用も考えられるので、ここはぜひとも抑えておきたいところです。 このくらいは自力でなんとかしたいと思って、とりあえず「--query kana:!""」とやってみたんですが、 General error: 1026 column lookup failed というエラーになってしまいました。 MySQL風にテーブル名を追加して「--query name_kanas.kana:!""」と書いてみても同様です。 また、「t.name_kanaが"/"で終わらない」という条件に読み替えて、「--query name_kana:!$/」というのも試してみたんですが、どうも後方「不一致」検索にはならないようで、0件取得になってしまいました。 どうすれば「WHERE t.kana IS NOT NULL」に相当する条件を追加できるでしょうか? 長らくお付き合いいただいていて恐縮の至りですが、参考URLだけでも教えていただければ幸いです。 僕も引き続き自助努力します…結果が出た場合は追ってご報告しますm(_ _;)m ---------------------------------------- > Date: Thu, 3 Jul 2014 21:43:23 +0900 > To: groon****@lists***** > From: kou****@clear***** > Subject: [groonga-dev,02469] Re: 「GROUP BY」条件をmroonga_command()で再現する方法 > > 須藤です。 > > In <BAY17****@phx*****> > "[groonga-dev,02453] Re: 「GROUP BY」条件をmroonga_command()で再現する方法" on Fri, 27 Jun 2014 20:28:29 +0900, > Kimura A <a.kim****@live*****> wrote: > >> ご提案いただいたテーブル構成で、実際に動作確認もできました。ありがとうございます。 >> ベクターカラムと似たコメントを書くことでJOINできる、ということ自体が僕にとっては初耳だったので、たいへん勉強になりました。 > > よかったです! > >> ただ、実は1つ、こちらのご説明に手抜かりがありました。 >> 情報の後出しになってしまって大変申しわけないんですが、ご指摘の「表記(name)は同じだが読み方(kana)が違う」レコードの存在は、今回、想定のうちに入れておきたいんですよね…。 >> 要件が変わってしまってすみませんm(_ _;)m > > であれば、nameとkanaを合わせてプライマリーキーにするのがよい > と思います! > > MySQLの場合は複数カラムでプライマリーキーを作れますが、 > Groongaはサポートしていないので、新しくカラムを作って、そこ > に自分でプライマリーキーを設定してください。 > >> CREATE TABLE t ( >> id int primary key auto_increment, >> name varchar(255), >> kana varchar(255) >> ) ENGINE = Mroonga DEFAULT CHARSET = utf8; > > これを > > CREATE TABLE name_kanas ( > name_kana varchar(512) PRIMARY KEY, > name varchar(255), > kana varchar(255) > ) ENGINE = Mroonga DEFAULT CHARSET = utf8; > > CREATE TABLE t ( > id int primary key auto_increment, > name_kana varchar(255) COMMENT 'type "name_kanas"' > ) ENGINE = Mroonga DEFAULT CHARSET = utf8; > > みたいにして、 > >> たとえば、tテーブルに以下のようなレコードがあった場合、 >> >> 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 ("トム", "とむ"); >> INSERT INTO t (name, kana) VALUES ("十夢", "じゅうむ"); // ※この行以降を追加しました >> INSERT INTO t (name, kana) VALUES ("トム", null); > > レコードはこうします。 > > INSERT INTO name_kanas (name_kana, name, kana) VALUES ("トム/とむ", "トム", "とむ"); > INSERT INTO name_kanas (name_kana, name, kana) VALUES ("ジェリー/じぇりー", "ジェリー", "じぇりー"); > INSERT INTO name_kanas (name_kana, name, kana) VALUES ("十夢/とむ", "十夢", "とむ"); > INSERT INTO name_kanas (name_kana, name, kana) VALUES ("ミッキー/みっきー", "ミッキー", "みっきー"); > INSERT INTO name_kanas (name_kana, name, kana) VALUES ("十夢/じゅうむ", "十夢", "じゅうむ"); > INSERT INTO name_kanas (name_kana, name, kana) VALUES ("トム/", "トム", null); > > 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 ("トム/とむ"); > INSERT INTO t (name_kana) VALUES ("十夢/じゅうむ"); > INSERT INTO t (name_kana) VALUES ("トム/"); > > 区切り文字(↑だと「/」)はname,kanaにでてこない文字ならなん > でもいいです。 > >> 欲しいのは以下のような結果です。 >> >> ジェリー, じぇりー, 1 >> 十夢, じゅうむ, 1 >> トム, とむ, 2 >> 十夢, とむ, 1 >> ミッキー, みっきー, 1 >> >> これをmroonga_command()で実現するにはどうすればよいでしょうか? > > で、こうです。 > > SELECT mroonga_command("select t --limit 0 --drilldown name_kana --drilldown_limit 10 --drilldown_output_columns name,kana,_nsubrecs --drilldown_sortby kana") AS result; > > 整形するとこうです。 > > select t > --limit 0 > --drilldown name_kana > --drilldown_limit 10 > --drilldown_output_columns name,kana,_nsubrecs > --drilldown_sortby kana > > ということで、nameとkanaをあわせてキーにしてください!が回答 > になります! > > -- > 須藤 功平 <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 mailing list > groon****@lists***** > http://lists.sourceforge.jp/mailman/listinfo/groonga-dev