簡単な解決策は、不変式を使用して分散クエリを実行するように要求ハンドラを構成することです。不変量は、distrib
パラメータの値がtrue
になるように強制します。これは、spark-solrがクエリ時に値を変更しようとしている場合でも同じです。不変のsolrconfig.xml
であなたの要求ハンドラエントリの定義に次の行を追加することによって行うことができます紹介:
<lst name="invariants">
<str name="distrib">true</str>
</lst>
不変の導入は問題を解決しようとしている間、私はそれが根本的な解決のようなものだと思います。これは、ソリューションがパラメータの値をオーバーロードする動作を隠すためです。不変量を導入することによって、distrib
をfalse
に設定することはできません。要求が明示的にそうであっても、distrib
の値は依然としてtrue
です。これは私の意見ではあまりにも危険なので、実装するのが難しいかもしれないが、その欠陥に悩まされない別の解決策を提案しています。
解決策は、forceDistrib=true
フラグをパラメータとして受け取った場合にのみ、distrib=true
を強制的に実行するクエリコンポーネントを実装することです。あなたはそれを使用するsolrconfig.xml
にコンポーネントを追加することによって、それを使用して、要求ハンドラを設定してSolrを設定することができるコンポーネントを構築した後
public class ForceDistribComponent extends SearchComponent {
private static String FORCE_DISTRIB_PARAM = "forceDistrib";
@Override
public void prepare(ResponseBuilder rb) throws IOException {
ModifiableSolrParams params = new ModifiableSolrParams(rb.req.getParams());
if (!params.getBool(FORCE_DISTRIB_PARAM, false)) return;
params.set(CommonParams.DISTRIB, true);
params.set(FORCE_DISTRIB_PARAM, false);
rb.req.setParams(params);
}
}
。
がsolrconfig.xml
の成分がsolrconfig.xml
ファイルに次のエントリを追加することによって行われる追加:forceDistrib
コンポーネントを使用するための要求ハンドラの設定
<searchComponent name="forceDistrib" class="ForceDistribComponent"/>
は、要求の下でのコンポーネントのリストに追加することによって行われますハンドラエントリ。
<arr name="components">
<str>forceDistrib</str>
<str>query</str>
...
</arr>
このソリューションは、単純に不変式を導入するよりもはるかに安全ですが、リストの最初のコンポーネントでなければなりません。