Rumah  >  Artikel  >  Java  >  Bagaimana untuk membina klien Elasticsearch dan memanggil API menggunakan Java?

Bagaimana untuk membina klien Elasticsearch dan memanggil API menggunakan Java?

WBOY
WBOYke hadapan
2023-04-24 09:46:06783semak imbas

    Elasticsearch menyediakan set kaya antara muka panggilan Java dengan membina klien. Secara umumnya, pelanggan dibahagikan kepada dua jenis: pelanggan maklumat kluster dan pelanggan data (indeks). Kedua-dua kategori ini boleh dibahagikan kepada operasi am dan operasi pentadbir.

    Hubungan warisan pelanggan

    (versi 1.5, versi lain mungkin berbeza):

    Bagaimana untuk membina klien Elasticsearch dan memanggil API menggunakan Java?

    Rajah hubungan warisan ini boleh menjadi sangat jelas Memahami pelaksanaan dan fungsi klien. Terdapat tiga kategori kesemuanya iaitu klien, indeksAdminClient dan ClusterAdminClient. Ia mempunyai kelas pelaksanaannya sendiri, tetapi pada akhirnya ia menyediakan perkhidmatan luaran melalui antara muka pelanggan. Sebagai antara muka luaran umum, klien pertama menggabungkan operasi berkaitan pentadbir melalui kaedah admin() Ia juga menyediakan semua operasi biasa pada data dan kelompok.

    Dari segi pelaksanaan kaedah,

    semua antara muka melaksanakan panggilan tak segerak dalam dua cara, satu ialah mengembalikan ActionFuture dan satu lagi menerima ActionListener.

    Ambil kaedah indeks sebagai contoh

    seperti yang ditunjukkan di bawah

    ActionFuture index(Permintaan IndexRequest) ;

    void index( Permintaan IndexRequest , ActionListener pendengar);

    Kaedah pertama akan mengembalikan masa hadapan dan kaedah kedua perlu lulus Pendengar. Ini juga merupakan dua cara asas pelaksanaan tak segerak. Pelanggan menggunakan mod fasad. Semua pelaksanaan berada dalam kelas AbstractClient Dengan mengambil kaedah indeks sebagai contoh, kodnya adalah seperti berikut:

    @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);
        }

    Pelaksanaan adalah seperti yang ditunjukkan di atas dipanggil mod fasad adalah kerana Semua kaedah disepadukan ke dalam klien, tetapi proses pelaksanaan dilaksanakan dalam tindakan yang sepadan. Dalam kaedah pelaksanaan, contoh tindakan yang sepadan diperolehi, dan logik sebenar dilaksanakan dalam tindakan transaksi yang sepadan.

    laksanakan kod kaedah

    adalah seperti berikut:

    @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);
        }

    Setiap operasi sepadan dengan transportAction yang sepadan, dan transportActions ini adalah pelaksana terakhir. Di sini kita mengambil indeks sebagai contoh untuk penjelasan ringkas Kita akan melihat lebih banyak hasil seperti ini dalam analisis fungsi indeks nanti.

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

    Dalam IndexAction, ia hanya mentakrifkan NAMA dan beberapa kaedah mudah. Nama ini akan didaftarkan dalam TransportService sebagai kunci kepada transportHandler semasa permulaan. Dalam kaedah pelaksanaan, transportAction akan dikeluarkan mengikut tindakan seperti yang ditunjukkan dalam kod sebelumnya. Logik pelaksanaan sebenar adalah dalam InternalTransportClient Pelaksanaannya akan dilangkau di sini dan akan dianalisis secara terperinci kemudian. Pendaftaran semua tindakan ini dilaksanakan dalam actionModule, dan proses pendaftaran akan dianalisis bersama-sama dengan tindakan itu kemudian.

    Atas ialah kandungan terperinci Bagaimana untuk membina klien Elasticsearch dan memanggil API menggunakan Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

    Kenyataan:
    Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam