Hiroyuki Sato
hiroy****@gmail*****
2015年 6月 30日 (火) 14:44:44 JST
林様
佐藤です。
ご連絡をありがとうございます。
つまりこうですね。
・5.0.4では、Articles["article1"].contentの表記は受付はするが、未実装で警告がでる
・現状ではなんらかの方法で一度文字列を取得したのちselect "_key *T "取得した文字列" とする必要がある
私の場合groongaへの問い合わせをするのはgroonga-clientを使おうと思っております。
そのため取得した文字列を一度エスケープして、問い合わせする必要があるということですね。
# 取得した文字列をエスケープする
escape_string = Groonga::Command::Format::Command.escape_value(取得した文字列)
# 次のコマンドをgroonga-clientで事項する。(GroongaClientはまだ勉強中でもっと他の表記があるのかも..)
select \
--table Users \
--filter 'sub_filter(keywords, "_key *T \\"#{escape_string}\\"")'
ありがとうございました。
2015年6月30日 13:46 HAYASHI Kentaro <hayas****@clear*****>:
> 林です。
>
> 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*****>
>
> _______________________________________________
> groonga-dev mailing list
> groon****@lists*****
> http://lists.osdn.me/mailman/listinfo/groonga-dev
--
Hiroyuki Sato