Seperti yang kita semua tahu, Elasticsearch disebut sebagai ES, yang didasarkan pada server pencarian berdasarkan Lucene. Ini menyediakan kemampuan pencari multi-pengguna multi-pengguna terdistribusi berdasarkan antarmuka web yang RESTful. Elasticsearch dikembangkan di Java dan dirilis sebagai open source di bawah ketentuan lisensi Apache. Saat ini merupakan mesin pencari tingkat perusahaan yang populer. Dirancang dalam komputasi awan, dapat mencapai pencarian waktu nyata, stabilitas, keandalan, cepat, dan mudah dipasang dan digunakan.
Kami membangun situs web atau aplikasi dan menambahkan fungsionalitas pencarian, tetapi sangat sulit untuk membuat pekerjaan pencarian. Kami ingin solusi pencarian berjalan dengan cepat, kami ingin memiliki konfigurasi nol dan mode pencarian yang sepenuhnya gratis, kami ingin dapat menggunakan JSON untuk mengindeks data melalui HTTP, kami ingin server pencarian kami selalu tersedia, kami ingin dapat memulai dari satu dan skala hingga ratusan, kami ingin mencari secara real time, kami ingin menjadi multi-menyamakan sederhana, kami ingin melakukan ratusan. Jadi kami menggunakan Elasticsearch untuk menyelesaikan semua masalah ini dan lebih banyak masalah lain yang mungkin timbul.
Saat menggunakan ES di Java, saya hanya ingin menyelesaikan masalah bahwa kecepatan kueri tidak cukup cepat dan efisiensinya tidak cukup tinggi. Kueri tunggal data dari database tidak dapat lagi memenuhi kebutuhan bisnis saat ini. OKE! Jadi sekarang mari kita bicara tentang cara menggunakan server pencarian ajaib ES di Java. Pertama -tama, Anda harus merujuk paket ketergantungan ES, dan ketergantungannya adalah sebagai berikut:
<dependency> <GroupId> org.elasticsearch.client </groupId> <ArTifactId> transport </artifactId> <version> 5.5.0 </version> </dependency> <groupid> org.elasticsearch.client </groupid> <ArTifactId> transport </artifactid> <lasticser> 5.5.0 </groupid> <TifactId> Transport </artifactid> versi 5.5.0 </groupid> </artifactid </artifactid> 5.5.0 </groupid> </artifactid </artifactid> </gruptid </artifactid </artifactid> </artifact <dependency> <GroupId> org.elasticsearch </groupid> <ArTifactId> Elasticsearch </artifactId> <version> 5.5.0 </version> </dependency>
Ok, setelah menambahkan dependensi, kami memasuki tahap penggunaan ES. Ngomong -ngomong, ada masalah yang perlu dijelaskan. Untuk menggunakan ES, Anda perlu menginstal Toolkit dan Tomcat JDK1.8 harus versi 7.05 atau lebih, jika tidak, ES tidak akan didukung, dan kesalahan dapat dilaporkan saat berintegrasi ke dalam proyek! , ada juga instalasi dan unduhan ES, berikut adalah alamat unduhan: https://www.elastic.co/downloads/elasticsearch
Setelah semuanya siap, kami akan memasuki momen yang sangat kami nantikan. Apa, ya, cara mencari dan menanyakan hal -hal di server ES di java, izinkan saya mengungkapkannya satu per satu untuk Anda:
Pertama, kami menyarankan kelas alat ES
Paket com.osa.utils; impor java.io.bufferedreader; impor java.io.ioException; import java.io.inputStreamreader; impor java.io.printwriter; impor java.net.url; impor java.net.urlconnection; impor java.net. java.util.list; impor java.util.map; impor java.util.set; impor org.apache.http.client.clientprotocolexception; impor com.alibaba.fastjson.jsonarray; impor com.alibaba.fastjson.jsonexception; impor com.JsonBonAba.alibaba.fastjson.jsonexception; Httpsentutils {/** * Kirim permintaan ke url yang ditentukan * * @param url * URL untuk mengirim permintaan * @param param * parameter permintaan, parameter permintaan harus dalam bentuk nama1 = value1 & name2 = value2. * @Return URL Hasil respons dari sumber daya jarak jauh yang diwakili oleh sumber daya jarak jauh*/ public static string sendGet (string url, string param) {string result = ""; BufferedReader di = null; coba {string urlnamestring = url + "?" + param; Url realUrl = URL baru (urlnamestring); // buka koneksi antara koneksi URL URLConnection = realUrl.openconnection (); // Atur koneksi atribut permintaan umum.setRequestProperty ("terima", "*/*"); Connection.setRequestProperty ("Connection", "Keep-Alive"); Connection.setRequestProperty ("User-Agent", "Mozilla/4.0 (kompatibel; MSIE 6.0; Windows NT 5.1; SV1)"); // Buat koneksi koneksi aktual.connect (); // Dapatkan semua bidang header respons peta <string, daftar <string>> map = connection.getHeaderFields (); // lintasi semua bidang header respons untuk (tombol string: map.keyset ()) {System.out.println (key + "--->" + Map.get (key)); } // Tentukan aliran input BufferedReader untuk membaca respons URL di = BufferedReader baru (inputStreamReader baru (connection.getInputStream ())); Garis string; while ((line = in.readline ())! = null) {result += line; }} catch (Exception e) {System.out.println ("Pengecualian terjadi saat mengirim permintaan GET!" + E); e.printstacktrace (); } // Gunakan blok akhirnya untuk menutup aliran input akhirnya {coba {if (in! = Null) {in.close (); }} catch (Exception e2) {e2.printstacktrace (); }} hasil pengembalian; } /** * Kirim permintaan ke URL yang ditentukan * URL @param * URL untuk mengirim permintaan * @param paramer * parameter permintaan, parameter permintaan harus dalam bentuk nama1 = value1 & name2 = value2. * @Return Hasil respons dari sumber daya jarak jauh yang diwakili oleh */ public static string sendPost (string url, string param) {printwriter out = null; BufferedReader di = null; Hasil string = ""; coba {url realUrl = URL baru (url); // buka koneksi antara urlconnection conn = realUrl.openconnection (); // Atur atribut permintaan umum Conn.setRequestProperty ("Recept", "*/*"); Conn.setRequestProperty ("Connection", "Keep-Alive"); Conn.setRequestProperty ("User-Agent", "Mozilla/4.0 (kompatibel; MSIE 6.0; Windows NT 5.1; SV1)"); // Untuk mengirim permintaan pos, Anda harus mengatur dua baris berikut ke Conn.setDoOutput (true); Conn.setDoInput (true); // Dapatkan aliran output yang sesuai dengan objek URLConnection out = printwriter baru (conn.getoutputStream ()); // Kirim parameter permintaan out.print (param); // buffer out.flush () dari aliran output flush; // Tentukan aliran input BufferedReader untuk membaca respons URL IN = BufferedReader baru (InputStreamReader baru (conn.getInputStream ())); Garis string; while ((line = in.readline ())! = null) {result += line; }} catch (Exception e) {System.out.println ("Pengecualian terjadi saat mengirim permintaan pos!" +e); e.printstacktrace (); } // Gunakan akhirnya blok untuk menutup aliran output dan aliran input akhirnya {coba {if (out! = Null) {out.close (); } if (in! = null) {in.close (); }} catch (ioException ex) {ex.printstacktrace (); }} hasil pengembalian; }} Setelah kelas alat tersedia, Anda dapat melihat bahwa ada dua metode untuk mengirim permintaan, satu adalah metode Sendget dan SendPost. Kedua metode tersebut dapat dipilih berdasarkan pilihan mereka sendiri. Tentu saja, ini hanya metode untuk mengirim permintaan. Bagaimana cara menelepon mereka? Di sini, karena kita bertanya dari ES, tidak perlu menggunakan kerangka kerja mybatis atau hibernasi. Anda dapat mendefinisikan SQL sendiri di lapisan data, dan kemudian menggunakan SQL untuk memanggil metode SendGet/SendPost melalui kelas alat sebelumnya, sebagai berikut:
String sql = urlencoder.encode ("pilih * dari tabel"); Metode Encode terutama menghilangkan beberapa spasi di SQL
String result = httpsentutils.sendget ("http://221.124.71.8:9200/_sql", "sql ="+sql); Port IP Plus dapat dikonfigurasi saat menginstal
OKE! Secara umum, jika pengiriman berhasil saat ini, data dalam ES dapat diambil. Karena data JSON yang dikembalikan di ES, kami memformat string JSON.
net.sf.json.jsonobject jsonObject = net.sf.json.jsonobject.fromObject (hasil); // Keluarkan tag hit net.sf.json.jsonobject hitsjsonObject = jsonobject.getjsonObject ("hits"); Setelah data diperoleh, disimpulkan bahwa itu adalah operasi bisnis. Hampir di sini.
Di atas adalah beberapa operasi kueri, jadi apa yang harus kita lakukan jika kita perlu memasukkan data memasukkan ke ES? Berikan contoh
Paket com.sojson.core.elasticsearch.Manager; impor java.util.arraylist; impor java.util.hashmap; impor java.util.list; impor java.util.map; impor net.sf.jsoneBject; impor org.elasticsearch.action.bulk.bulkruject; org.elasticsearch.action.bulk.bulkresponse; impor org.elasticsearch.action.index.indexRequestBuilder; impor com.sojson.common.utils.stringutils; Param Param.core.coreTer*{eLasticsearch.utils.estools; ParamClasserclasserTer {paramager {lasticsearch.utils.estools; publicClassercclasser {paramager {lasticsearch.utils.estools; publicClassercclasser*paramer {lasticsearch.utils. Ketik*@Param IDName ID Nama bidang*@param json JSON yang disimpan dapat menerima peta*@return*/publicstaticmapsave (indeks string, tipe string, string idname, jsonobject json) {daftar daftar = newArrayList (); list.add (json); return simpan (indeks, type, idname, list);} Parameter yang disahkan diproses dan disebut metode simpan untuk melakukan operasi penyisipan
/*** Tambahkan Data ke Elasticsearch*@Param Index Index*@Param Tipe Tipe*@Param ID Name Bidang ID*@Param ListData Koleksi objek*@return*/@SuppressWarnings ("Uncecked") PublicStaticMapSave (String Index, String, String IDNAME, Daftar Daftar) {BulkReQreest BulkREDER BULKRE, Daftar Daftar) {BulkReQreest BulkREDER BULKRE = Estools.client.preparebulk (). SetRefresh (true); peta resultMap = newhashmap (); for (objek objek: listData) {jsonobject json = jsonobject.fromObject (objek); // tidak ada idname ditentukan, kemudian membiarkan elasticsearch secara otomatis menghasilkan secara otomatis. If (stringutils.isblank (idName)) {indexRequestBuilder lrb = elasticsearchutils.client .prepareIndex (index, type) .setsource (json); BulkRequest.Add (lrb); // elasticsearchutils adalah kelas alat, yang dikonfigurasi dengan beberapa es (lrb); // elasticsearchutils adalah kelas alat, yang dikonfigurasi dengan beberapa es. json.optString (idname); indexRequestBuilder lrb = estools.client.prepareIndex (indeks, tipe, idValue) .setsource (json); bulkrequest.add (lrb);}} bulkresponse bulkresponse = bulkresponse = bulkresponse = bulkresponse = Bulkresponse = Bulkresponse = Bulkresponse = Bulkresponse = BulkResponse = Bulkresse = BulkRequest.execute (). ActionGet (); if (BulkResponse.hasfailures ()) {// Kegagalan proses dengan mengulangi melalui setiap item respons massal Sysystem.out.println (BulkResponse.getItems (). resultMap;} bulkRequest = estools.client.preparebulk (); resultMap.put ("200", "simpan sukses!"); return resultMap;}} Kelas Alat Elasticsearchutils
public class ElasticsearchUtils {private static final String CLUSTER_NAME = "cluster.name";private static final String ES_IP="es.ip";private static final String ES_PORT="es.port";private static Settings settings;private static TransportClient client;public static TransportClient getESClient() throws UnknownHostException{settings = Settings.builder().put(CLUSTER_NAME,ConfigUtils.getConfig(CLUSTER_NAME)).build();if(client != null){client = new PreBuiltTransportClient(settings).addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(ConfigUtils.getConfig(ES_IP)), Integer.parseint (configutils.getConfig (es_port))));} return client;} Di atas adalah operasi penyisipan. Oke, itu saja untuk ringkasan hari ini. Saya harap ini dapat memberi Anda sedikit bantuan, dan saya harap Anda dapat mendukung wulin.com lebih banyak.