2017-07-12 3 views
0

着信要求に応じていくつかの(ドメイン固有の)クエリの書き換えを実行する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でこのような形式のクエリー書き換えを実行するのに最適なアプローチですか?

ありがとうございます!

答えて

0

クライアントが最適な場所になるかどうかわからない場合は、HTTPリクエストが送信されると、サーバー側の独自のクエリパーサーもこれをキャッチします。

SearchSourceBuilderを置き換えて適切に変更しても十分ではありません。シリアライズの必要はありませんが、それは正確に何をしたいかによって異なります。それについても話す価値があるかもしれません。

+0

クエリの書き換えを実行している場所は、実際には「実際の」クライアントとElasticSearchクラスターの間のミドルウェアです。私はいくつかの追加検索を行いました。実際には '' SearchSourceBuilder''はスクロールサイズなどの設定を設定できる場所ですが、クライアントはスクロールの有効期限を制御します。しかし、洞察力をありがとう! – monkeyshrines

関連する問題