[groonga-dev,01855] Re: HTTP GETで複数カラムへの全文検索

Back to archive index

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




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