HAYASHI Kentaro
hayas****@clear*****
2015年 6月 30日 (火) 13:46:11 JST
林です。 On Mon, 29 Jun 2015 23:03:35 +0900 Hiroyuki Sato <hiroy****@gmail*****> wrote: > 須藤様 > > 佐藤です。 > > 少し前に問い合わせた件について教えて下さい。 > > 下記のArticles[key].contentの使い方がいまいちよくわからないのですが > どちらのドキュメントを読めばよいでしょうか? > ドキュメントはまだないのです。。。そのため以下で補足します。 > > select --table Keywords \ > --filter '_key *T "記事の内容"' > > (「記事の内容」を直接書くんじゃなくて > 「Articles[key].content」とかで参照できるようにしたほうがよ > さそうですね。) [groonga-dev,03213] Re: selectとin_valuesの制限事項について http://osdn.jp/projects/groonga/lists/archive/dev/2015-May/003215.html のサンプルを元に説明すると、 select \ --table Users \ --filter 'sub_filter(keywords, "_key *T \\"Groonga and Mroonga are good!\\"")' # -> [["user1", ["groonga", "mysql"]], # ["user3", ["mroonga"]]] 上記のようにsub_filterを使うとキーワードを抽出して、そのキーワードに興味を持っているユーザーを1回で 検索できるようになります。というのが前までの話でした。 でも、sub_filterに渡す抽出対象の本文は、事前に検索しておいてその結果を使わないといけません。 これが Articles[key].content を使うとそれを1回でできる、というのが嬉しいポイントです。 load --table Articles [ {"_key": "article1", "content": "Groonga and Mroonga are good!"}, {"_key": "article2", "content": "MySQL and PostgreSQL are good!"}, {"_key": "article3", "content": "Groonga + MySQL = Mroonga!"} ] では、上記のサンプルスキーマで実際に書くときはどうなるのかというと、 Articlesテーブルの_keyが"article1"であるcontentを表現するには、以下のように書きます。 Articles["article1"].content このように書くと Articles["article1"].content は "Groonga and Mroonga are good!" を意味するのです。 同様に"MySQL and PostgreSQL are good!"を表現するにはArticles["article2"].contentとなります。 これを適用すると、 変更前: select \ --table Users \ --filter 'sub_filter(keywords, "_key *T \\"Groonga and Mroonga are good!\\"")' 変更後: select \ --table Users \ --filter 'sub_filter(keywords, "_key *T Articles[\\article1\\].content")' とすっきり書けるようになるはずなんですが、実はこのクエリ、まだGroongaではサポートされていません。 > select --table Users --filter 'sub_filter(keywords, "_key *T Articles[\\"article1\\"].content")' [[-38,1435639029.84315,0.00157570838928223,"not implemented operator assigned",[["grn_expr_exec","expr.c",3518]]],[]] 現状では実装されていない部分なので、ゆくゆくはこれも動くといいなといったところなんです。 (Articles[key].content というように書けるようになったのも、実は先月の5.0.4リリースからだったりします。 なのでちょっと込み入ったクエリではサポートされていないのです。) -- HAYASHI Kentaro <hayas****@clear*****>