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 の仕様についてはリファレンスに詳しい記述があります。