3

インスタンスにいくつかの Solr コアがあり、それぞれにStandardRequestHandlerといくつかのカスタム リクエスト ハンドラが構成されています。

<requestDispatcher handleSelect="true" >
  <requestParsers enableRemoteStreaming="false" multipartUploadLimitInKB="2048" />
</requestDispatcher>
...
<requestHandler name="standard" class="solr.StandardRequestHandler" default="true" />
...
<requestHandler name="/custom" class="com.example.our.package.CustomHandler" />
...

SolrJを介して両方にアクセスできるようにしたいのですが、オブジェクトのbaseUrlプロパティを設定することによってのみこれを行うことができます。ただし、インスタンスは複数のスレッド間で共有されるため、競合状態が発生するため、HttpSolrServerこれは望ましくありません。もう 1 つの理由は、チームのコンセンサスが、単純化のためにスコープ化されていることにあることです。HttpSolrServerHttpSolrServerSingleton

私が試したのは次のようなものです:

HttpSolrServer server = new HttpSolrServer("http://URL_OF_SOLR:PORT/solr/");
SolrQuery query = new SolrQuery();
query.setQueryType("/core/custom");

これはカスタム ハンドラでは機能しますが/select、少なくとも試した URL ( /core/core/select/core//core/standard) などでは、 を呼び出すとコード 400 で失敗します。

だから私の質問は次のとおりです。コアのデフォルトのリクエストハンドラーを正しく参照するには、このクエリをどのように定義すればよいですqueryTypeSolrParams?

4

1 に答える 1

3

Solrのパラメーターを使用してqt、特定の要求ハンドラー (デフォルトの/selectハンドラーも含む) を指定できます。この仕組みの詳細については、 CoreQueryParametersを参照してください。SolrJ は、クラスのsetRequestHandlerメソッドを使用してこれをサポートします。SolrQuery

いくつかの例では、Solr インスタンスが にあり、とhttp://localhost:8983/solrという名前の 2 つのコアがあると仮定しています。core0core1

  • http://localhost:8983/solr/core0/select?q=*:*これは/selectデフォルトで使用します
  • http://localhost:8983/sole/core1/select?q=*:*&qt=termsこれは requestHandler という用語を使用します

最後に、コアqt内の名前付き requestHandler の選択をサポートするように設計されたパラメータ b/c にコア名を含めないでください。Solr インスタンスの Url には、コア名が含まれている必要があります。これは、各コアが独自の Solr インスタンスであるため、IMO として扱われる必要があるためです。SolrCore wiki ページから:

複数のコアを使用すると、個別の構成とインデックスを持つ単一の Solr インスタンスを使用でき、非常に異なるアプリケーション用に独自の構成とスキーマを使用できますが、統合された管理の利便性はそのままです。

したがって、複数の HttpSolrServer インスタンスを定義します。

 new HttpSolrServer(http://localhost:8983/solr/core0)
 new HttpSolrServer(http://localhost:8983/solr/core1)
于 2013-06-10T14:44:31.963 に答える