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.
(versi 1.5, versi lain mungkin berbeza):
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.
semua antara muka melaksanakan panggilan tak segerak dalam dua cara, satu ialah mengembalikan ActionFuture dan satu lagi menerima ActionListener.
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.
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!