着信要求に応じていくつかの(ドメイン固有の)クエリの書き換えを実行するElasticSearch用のFilterClient
拡張を実装しました。次のように実装が少し見えます:ElasticSearch FilterClient実装用のJava APIセットのサイズ
public class RewritingClient extends FilterClient {
@Override
protected
< Request extends ActionRequest<Request>,
Response extends ActionResponse,
RequestBuilder extends ActionRequestBuilder<Request, Response, RequestBuilder> >
void doExecute(Action<Request, Response, RequestBuilder> action, Request request, ActionListener<Response> listener) {
if (request instanceof SearchRequest) {
SearchRequest originalRequest = (SearchRequest) request;
SearchRequest rewrittenRequest = new SearchRequest();
// <Perform query rewriting>
// e.g., rewrittenRequest.indices(originalRequest.indices());
// e.g., rewrittenRequest.source(new SearchSourceBuilder().query(<Combine original request with additional parameters>));
super.doExecute(action, rewrittenRequest, listener);
}
}
}
問題は、このために仕事に、rewrittenRequest
インスタンス(すなわち、別のSearchRequest
オブジェクトが)例えば、インデックス、種類(手動検索のパラメータを設定する必要があること、ですSearchSourceRequestBuilder
、スクロール時間、...)。
このアプローチは、ElasticSearchのJava APIでこのような形式のクエリー書き換えを実行するのに最適なアプローチですか?
ありがとうございます!
クエリの書き換えを実行している場所は、実際には「実際の」クライアントとElasticSearchクラスターの間のミドルウェアです。私はいくつかの追加検索を行いました。実際には '' SearchSourceBuilder''はスクロールサイズなどの設定を設定できる場所ですが、クライアントはスクロールの有効期限を制御します。しかし、洞察力をありがとう! – monkeyshrines