[groonga-dev,03319] Re: selectとin_valuesの制限事項について

Back to archive index

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*****>




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