2

カスタム Solr コンポーネントを作成しています。コンポーネントの準備メソッドで、カスタム パラメーター ( 内req.params) として指定されたクエリを実行しています。q準備メソッドでパラメーター クエリを実行しているのではなく、カスタム パラメーターで定義された別の入力クエリを実行しています。そのカスタム入力クエリによって返されたドキュメントを使用して、prepare メソッドでいくつかの準備を行っています。

問題は、インデックスが複数のシャードに分散されているため、カスタム クエリによって返されるドキュメントは、シャードの 1 つに存在するドキュメントのみであるということです。つまり、準備メソッドで実行された検索は分散されておらず、部分的な結果が得られています。これは、準備メソッドで検索を実行する方法とほぼ同じです。

rb.req.getSearcher().getDocList(customQuery, null, null, offset, len, 0);

prepare メソッドで分散検索を行い、すべてのシャードから一致するドキュメントを取得する方法はありますか?


編集:

私の現在の解決策は、大まかに次のように Solrj を使用してクエリを実行することです。

SolrServer server = new HttpSolrServer(url);
SolrQuery request = new SolrQuery(customQuery);
NamedList queryResponse = server.query(request).getResponse();

次に、応答を解析して、返されたドキュメントのコンテンツを取得します。私はいくつかの理由で私の解決策が好きではありません。理由の 1 つは、応答を解析する必要があることです。しかし、主な理由は、Solr サーバーの URL をパラメーターとして渡す必要があるためです。URLをsolrconfig.xmlファイルに入れました。SolrサーバーのURLを明示的に指定せずに(おそらくZooKeeperを介して)SolrServerインスタンスを構築することは可能ですか?

4

1 に答える 1