#Elasticsearch は、クライアントを構築することによって、Java 呼び出しインターフェイスの豊富なセットを外部に提供します。一般に、クライアントはクラスタ情報クライアントとデータ (インデックス) クライアントの 2 種類に分類されます。これら 2 つのカテゴリは、一般操作と管理操作に分類できます。
(バージョン 1.5、他のバージョンは異なる場合があります):
この継承を見ると明確にわかります。関係図 クライアントの実装と機能を理解する。合計 3 つのカテゴリ (クライアント、インデックスAdminClient、および ClusterAdminClient) があります。独自の実装クラスがありますが、最終的にはクライアント インターフェイスを通じて外部サービスを提供します。一般的な外部インターフェイスとして、クライアントは最初に admin() メソッドを通じて管理関連の操作を組み合わせ、データとクラスターに対するすべての一般的な操作も提供します。
すべてのインターフェイスは 2 つの方法で非同期呼び出しを実装します。1 つは ActionFuture を返す方法、もう 1 つは ActionListener を受け入れる方法です。
以下に示すように
ActionFuture
index(IndexRequest request) ; voidindex( IndexRequest request 、ActionListener
リスナー);
最初のメソッドはフューチャーを返し、2 番目のメソッドはリスナーを渡す必要があります。これらは、非同期実装の 2 つの基本的な方法でもあります。クライアントはファサード モードを使用します。すべての実装は AbstractClient クラスにあります。index メソッドを例にとると、コードは次のとおりです:
@Override public ActionFuture<IndexResponse> index(final IndexRequest request) { return execute(IndexAction.INSTANCE, request); } @Override public void index(final IndexRequest request, final ActionListener<IndexResponse> listener) { execute(IndexAction.INSTANCE, request, listener); }
実装は上記のとおりです。ファサードモードは、すべてのメソッドがクライアントに統合されていますが、実行プロセスは対応するアクションで実行されるためです。実行メソッドでは、対応するアクション インスタンスが取得され、実際のロジックが対応するトランザクション アクションに実装されます。
は次のとおりです。
@SuppressWarnings("unchecked") @Override public <Request extends ActionRequest, Response extends ActionResponse, RequestBuilder extends ActionRequestBuilder<Request, Response, RequestBuilder, Client>> ActionFuture<Response> execute(Action<Request, Response, RequestBuilder, Client> action, Request request) { headers.applyTo(request); TransportAction<Request, Response> transportAction = actions.get((ClientAction)action); return transportAction.execute(request); } @SuppressWarnings("unchecked") @Override public <Request extends ActionRequest, Response extends ActionResponse, RequestBuilder extends ActionRequestBuilder<Request, Response, RequestBuilder, Client>> void execute(Action<Request, Response, RequestBuilder, Client> action, Request request, ActionListener<Response> listener) { headers.applyTo(request); TransportAction<Request, Response> transportAction = actions.get((ClientAction)action); transportAction.execute(request, listener); }
各操作は対応する TransportAction に対応し、これらの TransportAction が最終的な実行者になります。ここでは簡単に説明するためにインデックスを例に挙げますが、後ほどインデックス関数の分析でこのような結果がさらに表示されます。
public class IndexAction extends ClientAction<IndexRequest, IndexResponse, IndexRequestBuilder> { public static final IndexAction INSTANCE = new IndexAction(); public static final String NAME = "indices:data/write/index"; private IndexAction() { super(NAME); } @Override public IndexResponse newResponse() { return new IndexResponse(); } @Override public IndexRequestBuilder newRequestBuilder(Client client) { return new IndexRequestBuilder(client); } }
IndexAction では、NAME といくつかの簡単なメソッドが単純に定義されています。この名前は、起動時に TransportHandler へのキーとして TransportService に登録されます。実行メソッドでは、前のコードで示したように、アクションに応じて TransportAction が取り出されます。実際の実行ロジックは InternalTransportClient にありますが、その実装についてはここでは省略し、後ほど詳しく分析します。これらすべてのアクションの登録は actionModule に実装されており、登録プロセスは後でアクションとともに分析されます。
以上がJavaを使用してElasticsearchクライアントを構築し、APIを呼び出すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。