リクエストパラメータAPI

リクエストパラメータAPIを使用すると、 `solrconfig.xml` で定義されたパラメータをオーバーライドまたは置き換えることができるパラメータセット(別名paramset)を作成できます。

このAPIで定義されたパラメータセットは、Solrへのリクエストで使用したり、 `solrconfig.xml` リクエストハンドラ定義で直接参照したりできます。

これは、個別のAPIではなく、設定APIの別のエンドポイントであり、独自のコマンドを持っています。 `solrconfig.xml` のセクションを置き換えたり変更したりするのではなく、リクエストで使用されるパラメータを処理するための別の方法を提供します。設定APIと同じように動作し、実行時に使用される別のファイルにパラメータを保存します。この場合、パラメータは `params.json` という名前のファイルに保存されます。このファイルは、SolrCloudを実行している場合はZooKeeperに、ユーザー管理クラスタまたはシングルノードインストールの場合は `conf` ディレクトリに保存されます。

`params.json` に保存されている設定は、クエリ時に `solrconfig.xml` で定義されている設定をオーバーライドするために使用されます(下記参照)。

この機能はいつ使用しますか?

  • 頻繁に変更されるリクエストパラメータを更新するために、 `solrconfig.xml` を頻繁に編集することを避けるため。

  • さまざまなリクエストハンドラでパラメータを再利用するため。

  • リクエスト時にパラメータセットを組み合わせるため。

  • 小さなパラメータ変更のためにコレクションの再読み込みを避けるため。

リクエストパラメータエンドポイント

すべてのリクエストは、設定APIの `/config/params` エンドポイントに送信されます。

リクエストパラメータの設定

リクエストパラメータを設定または更新するリクエストは、名前付きマップのセットとして送信されます。これらのオブジェクトは、リクエストまたはリクエストハンドラ定義で直接使用できます。パラメータセットを削除するリクエストは、名前のリストまたは名前として送信されます。

使用可能なコマンドは次のとおりです。

  • `set`:パラメータセットマップを作成または上書きします。

  • `delete`:リクエストパラメータセットマップを削除します。

  • `update`:パラメータセットマップを更新します。これは `map.putAll(newMap)` と同等です。両方のマップがマージされ、新しいマップに古いマップと同じキーがある場合は上書きされます。

必要に応じて、これらのコマンドを1つのリクエストに混在させることができます。

`set` または `update` コマンドの場合、各マップには名前が含まれている必要があります。これにより、Solrへの直接リクエストまたはリクエストハンドラ定義で後で参照できます。

次の例では、 'myFacets' と 'myQueries' という名前の2つのパラメータセットを設定しています。

curl https://127.0.0.1:8983/solr/techproducts/config/params -H 'Content-type:application/json'  -d '{
  "set":{
    "myFacets":{
      "facet":"true",
      "facet.limit":5}},
  "set":{
    "myQueries":{
      "defType":"edismax",
      "rows":"5",
      "df":"text_all"}}
}'

上記の例では、すべてのパラメータは `solrconfig.xml` の「defaults」と同等です。以下のように、不変条件と追加を追加することができます。

curl https://127.0.0.1:8983/solr/techproducts/config/params -H 'Content-type:application/json'  -d '{
  "set":{
    "my_handler_params":{
      "facet.limit":5,
      "_invariants_": {
        "facet":true,
       },
      "_appends_":{"facet.field":["field1","field2"]
     }
   }}
}'

次の例では、 'myFacets' と 'myQueries' という名前の2つのパラメータセットが削除されます。

curl https://127.0.0.1:8983/solr/techproducts/config/params -H 'Content-type:application/json'  -d '{
  "delete":[
    "myFacets",
    "myQueries"
  ]
}'

単一のパラメータセットを削除する場合、値はリストではなく文字列として指定できます。

curl https://127.0.0.1:8983/solr/techproducts/config/params -H 'Content-type:application/json'  -d '{
  "delete":"myFacets"
}'

リクエストハンドラでのリクエストパラメータの使用

上記のセクションで `my_handler_params` パラメータセットを作成した後、次のようにリクエストハンドラを定義できます。

<requestHandler name="/my_handler" class="solr.SearchHandler" useParams="my_handler_params"/>

これは、次のような標準のリクエストハンドラ定義と同等です。

<requestHandler name="/my_handler" class="solr.SearchHandler">
  <lst name="defaults">
    <int name="facet.limit">5</int>
  </lst>
  <lst name="invariants">
    <bool name="facet">true</bool>
  </lst>
  <lst name="appends">
    <arr name="facet.field">
      <str>field1</str>
      <str>field2</str>
    </arr>
  </lst>
</requestHandler>

リクエストパラメータAPIを使用した暗黙的なRequestHandler

Solrには、設定がsolrconfig.xmlに存在しないため、リクエストパラメータAPIを介してのみ設定できる、すぐに使用可能なRequestHandlerが多数付属しています。暗黙的なRequestHandlerを設定する際に使用するパラメータセットについては、暗黙的なRequestHandlerを参照してください。

RequestHandlerを使用した展開されたパラメータセットと有効なパラメータの表示

useParamsで定義されたRequestHandlerの展開されたパラメータセットと結果として得られる有効なパラメータを表示するには、expandParamsリクエストパラメータを使用します。たとえば、/exportリクエストハンドラーの場合

$ curl https://127.0.0.1:8983/solr/techproducts/config/requestHandler?componentName=/export&expandParams=true

リクエストパラメータの表示

作成されたパラメータセットを表示するには、/config/paramsエンドポイントを使用してparams.jsonの内容を読み取るか、リクエストで名前を使用します

$ curl https://127.0.0.1:8983/solr/techproducts/config/params

#Or use the paramset name
$ curl https://127.0.0.1:8983/solr/techproducts/config/params/myQueries

useParamsパラメータ

リクエストを行う際、useParamsパラメータは、リクエストに送信されたリクエストパラメータを適用します。これは、リクエスト時に実際のパラメータに変換されます。

たとえば(前の例で設定した名前を使用します。ご自身の名前に置き換えてください)

https://127.0.0.1/solr/techproducts/select?useParams=myQueries

同じリクエストで複数のパラメータセットを渡すことができます。例えば

https://127.0.0.1/solr/techproducts/select?useParams=myFacets,myQueries

上記の例では、パラメータセット 'myQueries' が 'myFacets' の上に適用されます。そのため、'myQueries' の値は 'myFacets' の値よりも優先されます。さらに、リクエストで渡された値は、useParamsパラメータよりも優先されます。これは、solrconfig.xml<requestHandler>定義で指定された「defaults」のように機能します。

パラメータセットは、RequestHandler定義で次のように直接使用できます。リクエストにuseParamsが含まれている場合でも、指定されたuseParamsは常に適用されることに注意してください。

<requestHandler name="/terms" class="solr.SearchHandler" useParams="myQueries">
  <lst name="defaults">
    <bool name="terms">true</bool>
    <bool name="distrib">false</bool>
  </lst>
  <arr name="components">
    <str>terms</str>
  </arr>
</requestHandler>

要約すると、パラメータはこの順序で適用されます

  • solrconfig.xml<invariants>で定義されたパラメータ。

  • params.jsoninvariantsに適用され、RequestHandler定義または単一のリクエストで指定されたパラメータ。

  • リクエストで直接定義されたパラメータ。

  • リクエストで定義されたパラメータセット。useParamsでリストされた順序です。

  • RequestHandlerで定義されているparams.jsonで定義されたパラメータセット。

  • solrconfig.xml<defaults>で定義されたパラメータ。

パブリックAPI

RequestParamsオブジェクトには、SolrConfig#getRequestParams()メソッドを使用してアクセスできます。各パラメータセットには、RequestParams#getRequestParams(String name)メソッドを使用して名前でアクセスできます。

リクエストパラメータAPIの使用例

Solrの「films」の例は、パラメータAPIの使用方法を示しています。この例は、Solrインストール(example/filmsディレクトリ内)で使用するか、Solr GitHubミラーのhttps://github.com/apache/solr/tree/main/solr/example/filmsでファイルを表示できます。