HAYASHI Kentaro
hayas****@clear*****
2013年 10月 2日 (水) 17:52:14 JST
林です。 On Tue, 01 Oct 2013 18:29:53 +0900 山本 良二 <r.yam****@miner*****> wrote: > はじめまして、山本と申します。 > groongaを使って検索システムを作ろうと試しております。 > > groongaのqueryをHTTP GETにうまく置き換えられず困っております。 > やり方について何か分かれば、ご教示いただけたらと思います。 > > --------------------- > [環境] > CentOS 5.5 > groonga 3.0.6 > > groongaをHTTPサーバーとして起動 > > --------------------- > [内容] > filter コマンドで、title、description カラムに対して全文検索させたい。 > > select --table テーブル名 --filter '( title @ "ワード1" || description @ "ワード1") && ( title @ "ワード2" || description @ "ワード2" )' > select --table テーブル名 --filter '( title @ "ワード1" || description @ "ワード1") && ( title @ "ワード2" || description @ "ワード2" )' --drilldown title > > 検索結果として、283件がヒットします > > 上記のgroonga queryを、HTTP GETリクエストにしようとし、下記を試しました。 > > > http://[IP_ADDRESS]:[PORT]/d/select?table=テーブル名&filter=(title@"ワード1"||description@"ワード1")&&(title@"ワード2"||description@"ワード2") > http://[IP_ADDRESS]:[PORT]/d/select?table=テーブル名&filter=(title@"ワード1"||description@"ワード1")&&(title@"ワード2"||description@"ワード2")&drilldown=title > > 検索結果として、2908件がヒットします。 > 2番目の検索ワードで絞込みが出来ていないようです。 > > また、ドリルダウンのほうは、 > ヘッダ部は表示されますが、データ部分のJSONが全く出力されない状況です > > 上記のクエリですと、filterに渡している検索条件をURLエンコードしないといけません。 たとえば、curlコマンドで試すとするとこんな感じです。(テーブル名がBooksでワード1がgroonga、ワード2がmroongaと仮定) curl "http://localhost:10041/d/select?table=Books&filter=%28title%40\"groonga\"%7C%7Cdescription%40\"groonga\"%29%26%26%28title%40\"mroonga\"%7C%7Cdescription%40\"mroonga\"%29&drilldown=title" 上記のようにURLエンコードをしていないと、おっしゃるように二番目の検索ワードが無視されてしまいます。 うまくいかなかったリクエストでは /d/select?table=テーブル名&filter=(ワード1までがfilterのパラメータ)&(別のパラメータ1)&(別のパラメータ2) というように&&がGETリクエストのパラメータ区切りと解釈されます。そのためfilterに二番目の検索ワードが渡せていなかったのです。 以上、よろしくお願いいたします。 -- HAYASHI Kentaro <hayas****@clear*****>