ホームページ  >  記事  >  Java  >  Javaを使用してElasticsearchクライアントを構築し、APIを呼び出すにはどうすればよいですか?

Javaを使用してElasticsearchクライアントを構築し、APIを呼び出すにはどうすればよいですか?

WBOY
WBOY転載
2023-04-24 09:46:06821ブラウズ

    #Elasticsearch は、クライアントを構築することによって、Java 呼び出しインターフェイスの豊富なセットを外部に提供します。一般に、クライアントはクラスタ情報クライアントとデータ (インデックス) クライアントの 2 種類に分類されます。これら 2 つのカテゴリは、一般操作と管理操作に分類できます。

    クライアントの継承関係

    (バージョン 1.5、他のバージョンは異なる場合があります):

    Javaを使用してElasticsearchクライアントを構築し、APIを呼び出すにはどうすればよいですか?

    この継承を見ると明確にわかります。関係図 クライアントの実装と機能を理解する。合計 3 つのカテゴリ (クライアント、インデックスAdminClient、および ClusterAdminClient) があります。独自の実装クラスがありますが、最終的にはクライアント インターフェイスを通じて外部サービスを提供します。一般的な外部インターフェイスとして、クライアントは最初に admin() メソッドを通じて管理関連の操作を組み合わせ、データとクラスターに対するすべての一般的な操作も提供します。

    メソッドの実装

    すべてのインターフェイスは 2 つの方法で非同期呼び出しを実装します。1 つは ActionFuture を返す方法、もう 1 つは ActionListener を受け入れる方法です。

    index メソッドを例に挙げます

    以下に示すように

    ActionFutureindex(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);
        }

    実装は上記のとおりです。ファサードモードは、すべてのメソッドがクライアントに統合されていますが、実行プロセスは対応するアクションで実行されるためです。実行メソッドでは、対応するアクション インスタンスが取得され、実際のロジックが対応するトランザクション アクションに実装されます。

    execute メソッド コード

    は次のとおりです。

    @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 サイトの他の関連記事を参照してください。

    声明:
    この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。