Solrに検索リクエストを送る場合、検索用のパラメータはリクエストバラメータで指定するのが通常の方法です。
curl -s 'http://localhost:8983/solr/test/select?fl=id,type,name&q=area:中央区&fq=type:官公庁'
これとは別に、検索パラメータをJSON形式で指定する方式も用意されています。
上記の例はJSON方式だと以下のようになります。
curl -s http://localhost:8983/solr/test/query -d ' { "query" : "area:中央区", "filter" : "type:官公庁", "fields" : "id,type,name" }'
ファイルで指定することもできます。
$ cat request.json { "query" : "area:中央区", "filter" : "type:官公庁", "fields" : "id,type,name" } $ curl http://localhost:8983/solr/test/query -d @request.json
リクエストパラメータによる検索条件の指定とJSONによる指定は併用できます。同じパラメータに対してそれぞれで異なる値を指定した場合、基本的にはリクエストパラメータの方が優先されますが、複数の値を許すパラメータについては両方が使われます。
つまり、以下の2つは同じ内容のリクエストです。
curl 'http://localhost:8983/solr/test/query?json.limit=5&json.filter="area:中央区"' -d ' { "query" : "name:自動車", "limit" : 3 "filter" : "type:官公庁", "fields" : "id,type,area,name" }'
curl 'http://localhost:8983/solr/test/query' -d ' { "query" : "name:自動車", "limit" : 5 "filter" : ["type:官公庁","area:中央区"], "fields" : "id,type,area,name" }'
通常の検索方法と比べると、JSON方式には可読性や柔軟性の高さという利点があります。記号文字のエスケープやURLエンコーディングにもあまり気を使わなくて済みます。
また、Solr で使われている JSON 用の Noggit パーザの拡張機能により、JSONの標準から外れた便利な記法を利用できます。たとえば、シングルクォートの文字列を使えるのでフレーズ検索のときに便利です。
curl http://localhost:8983/solr/test/query -d ' { "query" : 'address:"中央区大手前"', "filter" : "type:官公庁", "fields" : "id,type,name" }'
JSON Request API の仕様についてはリファレンスに詳しい記述があります。