SolrのJSON Request API

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

Related Post