Lingkungan Sistem: CentOS 7.2 Di Bawah VM12
Versi Terinstal Saat Ini: Elasticsearch-2.4.0.tar.gz
Operasi Java ES Cluster Langkah 1: Mengkonfigurasi Informasi Objek Cluster; 2: Buat klien; 3: Lihat informasi cluster
1: Nama Cluster
Nama kluster default adalah Elasticsearch. Jika nama cluster tidak konsisten dengan yang ditentukan, kesalahan akan dilaporkan saat menggunakan sumber daya node.
2: Fungsi mengendus
Mulailah fungsi sniff melalui client.transport.sniff, sehingga Anda hanya perlu menentukan node di cluster (tidak harus node master), dan kemudian memuat node lain di cluster. Dengan cara ini, selama program terus dimatikan, Anda masih dapat terhubung ke node lain bahkan jika node ini turun.
3: Query Type SearchType.Query_THEN_FETCH
Ada 4 jenis tipe kueri dalam kueri ES
Query_and_fetch:
Node master mendistribusikan permintaan kueri ke semua pecahan. Setiap beling diurutkan dan diurutkan sesuai dengan aturan kueri sendiri, yaitu frekuensi dokumen frekuensi kata, dan kemudian mengembalikan hasilnya ke node utama. Master node merangkum dan mengurutkan semua data dan mengembalikannya ke klien. Metode ini hanya membutuhkan interaksi dengan ES sekali.
Metode kueri ini memiliki masalah dengan volume data dan penyortiran. Node utama akan merangkum data yang dikembalikan oleh semua pecahan sehingga volume data akan relatif besar. Kedua, aturan pada setiap beling mungkin tidak konsisten.
Query_then_fetch:
Node master mendistribusikan permintaan ke semua pecahan. Setelah setiap beling diurutkan, ID dan skor data dikembalikan ke node master. Setelah menerimanya, master node merangkum dan mengurutkannya, dan kemudian membaca data yang sesuai ke node yang sesuai sesuai dengan ID yang diurutkan dan mengembalikannya ke klien. Metode ini membutuhkan interaksi dengan ES dua kali.
Metode ini memecahkan masalah volume data, tetapi masalah penyortiran masih ada dan merupakan metode kueri default ES
Def_query_and_fetch: dan dfs_query_then_fetch:
Menyatukan aturan setiap beling untuk mencetak gol. Memecahkan masalah penyortiran, tetapi dfs_query_and_fetch masih memiliki masalah volume data, dfs_query_then_fetch keduanya memiliki masalah terbaik, tetapi efisiensinya adalah yang terburuk.
1. Dapatkan klien, dua cara untuk mendapatkan
@Before public void Sebelum () melempar Exception {Map <String, String> MAP = new HashMap <String, String> (); peta.put ("cluster.name", "Elasticsearch_wenbronk"); Pengaturan.Builder Pengaturan = Pengaturan.Builder (). Put (peta); klien = transportClient.builder (). Pengaturan (Pengaturan) .build () .addtransportAddress (inetsocketTransportAddress baru (inetaddress.getbyname ("www.wenbronk.com"), integer.parseint ("9300")))); } @Before public void before11() throws Exception { // Create the client, use the default cluster name, "elasticSearch"// client = TransportClient.builder().build()// .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("www.wenbronk.com"), 9300)); // Tentukan informasi konfigurasi cluster melalui objek Pengaturan, dan Pengaturan Nama Cluster yang dikonfigurasi = pengaturan.settingsbuilder (). Put ("cluster.name", "elasticsearch_wenbronk") // atur name cluster // .put ("client.transport.sniff", true) // ubah sniff, "itu client.transport. .put ("network.host", "192.168.50.37") .put ("client.transport.ignore_cluster_name", true) // abaikan verifikasi nama cluster, dan dapat terhubung ke nama cluster jika nama cluster tidak benar setelah pembukaan // .put ("client.transport.nodes_sampler_inter / /. (" client.transport.nodes_sampleRer_inter /client ("client.transport.nodes_sampleRer_interve, (" client.transport.nodes_sampleRer_intve ("client.transport.nodes_sampler_inter / /. .put ("client.transport.ping_timeout", 5) // Laporkan kesalahan, waktu tunggu ping, .build (); klien = transportClient.builder (). Pengaturan (Pengaturan) .build () .addtransportAddress (inetsocketTransportAddress baru (inetsocketAddress baru ("192.168.50.37", 9300))); // Default 5s // Berapa lama waktu yang dibutuhkan untuk membuka koneksi, default 5s System.out.println ("Success Connect"); }PS: Dua metode yang diberikan oleh situs web resmi tidak dapat digunakan, mereka perlu digabungkan untuk menggunakannya, dan saya membuang sore saya ...
Arti parameter lain:
Kode:
Paket com.wenbronk.javaes; import java.net.inetaddress; impor java.net.inetsocketaddress; impor java.util.date; impor java.util.hashmap; impor java.util.list; impor java.util.maap; impor java.map; org.elasticsearch.action.bulk.backoffpolicy; impor org.elasticsearch.action.bulk.bulkprocessor; impor org.elasticsearch.action.bulk.bulkprocessor.listener; impor org.elasticsearch.action.bulk.bulkrequest; impor org.elasticsearch.action org.elasticsearch.action.bulk.bulkresponse; impor org.elasticsearch.action.delete.deleterequest; impor org.elasticsearch.action.delete.deleteresponse; import org.elasticsearch.actigonse.getResponse; impor org.elasticsearch.acticsearch.action.gete.getResponse; impor org.elasticsearch.acticsearch.action.get.getResponse; impor org.elasticsearch.acticsearch.action.action.getResponse; impor org.elasticsearch.acticsearch.action org.elasticsearch.action.get.multigetResponse; impor org.elasticsearch.action.index.indexRequest; impor org.elasticsearch.action.index.indexresponse; impor org.elasticsearch.action.updateSeSesponse; impor org.elelasticsearch.acticse.uPdonce; Impor org.elelassearch.acticse.acticse.updonce; org.elasticsearch.client.transport.transportclient; impor org.elasticsearch.cluster.node.discoverynode; impor org.elasticsearch.common.settings.settings; impor org.elasticsearch.common.transport.inetsocketTransporport; impor org.elasticsearch.common.transport.inetsocketTransport; org.elasticsearch.common.transport.inetsocketTransport; org.elasticsearch.common.unit.bytesizevalue; impor org.elasticsearch.common.unit.timevalue; org.elasticsearch.common.xcontent.xcontentBuilder; impor org.elasticsearch.common.xcontent.xcontentscripselsearch.elasticsearch.common.xcontent.xcontentscripselfacory; org.junit.Before; impor org.junit.test; import com.alibaba.fastjson.jsonObject;/** * Gunakan Java API untuk mengoperasikan Elasticsearch * * @Author 231 *//kelas publik Javaestest {Private TransportClient Client; sumber indeks privat; /*** Dapatkan koneksi, jalan pertama* @throws Exception* /// @Before public void Sebelum () melempar Exception {Map <String, String> Map = new HashMap <String, String> (); peta.put ("cluster.name", "Elasticsearch_wenbronk"); Pengaturan.Builder Pengaturan = Pengaturan.Builder (). Put (peta); klien = transportClient.builder (). Pengaturan (Pengaturan) .build () .addtransportAddress (inetsocketTransportAddress baru (inetaddress.getbyname ("www.wenbronk.com"), integer.parseint ("9300")))); }/ *** Lihat informasi cluster*/ @test public void testInfo () {list <coverporterynode> node = client.connectedNodes (); untuk (node Discoverynode: node) {System.out.println (node.getHostAddress ()); }}/*** Atur string json, metode 1, langsung splicing*/public string createJson1 () {string json = "{" + "/" user/":/" kimchy/"," + "/" postdate/":/" 2013-01-30/"," + "/" ":/":/"2013-01-30/", " +" mengembalikan json; } / ** * Buat json dengan peta * / peta publik <string, objek> createJson2 () {peta <string, objek> json = hashmap baru <string, objek> (); json.put ("pengguna", "kimchy"); json.put ("postdate", tanggal baru ()); json.put ("pesan", "mencoba elasticsearch"); mengembalikan json; } / *** Buat menggunakan FastJson* / public jsonObject createJson3 () {jsonObject json = new jsonObject (); json.put ("pengguna", "kimchy"); json.put ("postdate", tanggal baru ()); json.put ("pesan", "mencoba elasticsearch"); mengembalikan json; } / *** Gunakan ES Help Class* / Public xcontentBuilder createJson4 () melempar Exception {// Buat objek JSON, salah satu cara untuk membuat json xcontentBuilder sumber = xcontentfactory.jsonbuilder () .tartObject () .field ("user", "user", "KIMCHY"). "POSPTOBJECT () .Field (" User "," User "," User "," User "," KIMCHY ")." untuk keluar elasticsearch ") .endObject (); sumber pengembalian; } / *** Simpan dalam indeks* @throws Exception* / @test public void test1 () melempar Exception {XContentBuilder Source = createJson4 (); // Simpan JSON di index indexResponse response = client.prepareIndex ("twitter", "tweet", "1"). SetSource (sumber) .get (); // // hasilnya diperoleh string index = response.getIndex (); String type = response.getType (); String id = response.getId (); versi panjang = response.getVersion (); boolean dibuat = response.iscreated (); System.out.println (index + ":" + type + ":" + id + ":" + Versi + ":" + dibuat); }/ *** Dapatkan API Dapatkan informasi dokumen yang ditentukan*/ @test public void testget () {// getResponse response = client.prepareget ("twitter", "tweet", "1") // .get (); GetResponse response = client.prepareget ("twitter", "tweet", "1") .setOperationThreaded (false) // Thread safe.get (); System.out.println (response.getSourceAsstring ()); } / ** * Uji Hapus API * / @Test public void testDelete () {deleteresponse response = client.preparedeLete ("twitter", "tweet", "1") .get (); Indeks string = response.getIndex (); String type = response.getType (); String id = response.getId (); versi panjang = response.getVersion (); System.out.println (indeks + ":" + type + ":" + id + ":" + versi); } / ** * Uji Pembaruan Pembaruan API * Gunakan Objek UpdateRequest * @throws Exception * / @test public void testUpdate () melempar pengecualian {UpdateRequest updateRequest = new UpdateReSequest (); updateRequest.index ("twitter"); updateRequest.type ("tweet"); updateRequest.id ("1"); UpdateRequest.doc (xcontentfactory.jsonbuilder () .StartObject () // Tambahkan bidang yang tidak ada, ganti bidang yang ada. ResponsePonseSponse = client.update (UpdateRequest) .get (); // cetak indeks string = response.getIndex (); String type = response.getType (); String id = response.getId (); versi panjang = response.getVersion (); System.out.println (indeks + ":" + type + ":" + id + ":" + versi); }/** * Uji API Pembaruan, gunakan klien * @trows Exception */@test public void testupdate2 () melempar Exception {// Diperbarui dengan Objek Script // Updateresponse Response = Client.PrepareUpdate ("Twitter", "Tweet", "1")/. // responsePonsePonse respons = client.prepareupdate ("twitter", "tweet", "1") // .setDoc (xcontentfactory.jsonbuilder () // .StartObject () // .field ("Gender", "Malelelele") // .endObject () (). // Gunakan objek dan skrip UpdateRequest // UpdateRequest UpdateRequest = new UpdateRequest ("Twitter", "Tweet", "1") // .script (skrip baru ("ctx._source.gender =/" pria/"")); // responsePonsePonse = client.update (updateRequest) .get (); // responsePonseponse response = client.update (pembaruan baru ("twitter", "tweet", "1") .doc (xcontentfactory.jsonbuilder () .StartObject () .field ("Gender", "Male") .EndObject ()). Get (); System.out.println (response.getIndex ()); } / ** * Uji Pembaruan * Gunakan UpdateRequest * @throws Exception * @throws InterruptException * / @test public void testupdate3 () melempar interruptedException, pengecualian {UpdateRequest UpdateRequest = New UpdateRequest ("Twitter", "Tweet", "1"). Skrip ("ctx._source.gender =/" pria/"")); ResponsePonseSponse = client.update (UpdateRequest) .get (); } / ** * Metode Upsert Test * @Throws Exception * * / @test public void testupsert () melempar Exception {// Atur kondisi kueri, tambahkan indexRequest indexRequest = new indexRequest ("Twitter", "Tweet", "2") .source (XcontentFactory.jsonbuLer (") .source (xcontentFactory.jsonbuLer (") (xcontentfactory.jsonbuLer (") (xcontentFactory.jsonbuLer (" xcontentFactory.jsonbuCory. .field ("gender", "gfrerq") .endObject ()); // Setel UPDATE, temukan pengaturan pembaruan di bawah UpdateRequest Upsert = new UpdateRequest ("Twitter", "Tweet", "2") .doc (xcontentfactory.jsonbuilder () .StartObject () .field ("User", "Wenbronk") .EndObject ()) .Upsert ("User", "Wenbronk") .EndObject ()) .Upsert ("User", "Wenbronk") .EndObject () () (). client.update (Upsert) .get (); } / ** * Uji multi get API * Dapatkan dari indeks, ketik, dan id * / @test public void testmultiget () {multigetResponse multigetRespons = client.preparemultiget () .add ("twitter", "tweet", "1") .add ("twitter", "tweet", "" "" 2). "ketik", "foo") .get (); untuk (MultigetitemResponse ItemResponse: MultigetResponse) {getResponse response = itemResponse.getResponse (); if (response.isexists ()) {string sourceAsstring = response.getSourCeAsstring (); System.out.println (SourceAsstring); }}} / *** Eksekusi batch curah* Kueri dapat diperbarui atau menghapus banyak dokumen* / @test public void testBulk () melempar Exception {BulkRequestBuilder bulkRequest = client.preparebulk (); BulkRequest.Add (Client.PrepareIndex ("Twitter", "Tweet", "1") .setsource (xcontentfactory.jsonbuilder () .StartObject () .field ("user", "kimchy") .field out. BulkRequest.Add (Client.PrepareIndex ("Twitter", "Tweet", "2") .setsource (xcontentfactory.jsonbuilder () .StartObject () .field ("User", "Kimchy") .field ("Postdate", New Date ()) .field "," Pesan "," Lain -Field ("Postdate"). BulkResponse Response = BulkRequest.get (); System.out.println (response.getHeaders ()); } / ** * Gunakan prosesor massal * @throws Exception * / @test public void testbulkprocessor () melempar Exception {// Buat Bulkporcessor ObjectbulkProcessor BulkProcessor = BulkProcessor.builder (klien, pendengar baru () {public void sebelumnya sebelum paramlonggor, bentakan paramlroned, klien, bulkquest) {public void sebelumnya sebelum paramlonggor, b sekaras, b sekaras () {public parobest) {public Paramlroned (BulkQuest (BulkQuest (BulkQuest (BULK (BULK (BULK () Metode Stub} // Jalankan public void afterbulk (long paramlong, BulkRequest parambulkRequest, Throwable Paramthrowable) {// TODO METODE AUTO-GOYERATED} public void afterbulk (long paramlong, BulkRequest ParambulkRequest, Bulkresponpon Parambulkon {BulkRequest ParambulkRequest, Bulkresponsponpon Parambulkonpon Parambulkonpon Parambulkonpon Parambulkon, BulkResponson Parambulkon Parambulkon Parambulkon Parambulkonpon PARAMBURPONPEPONPONPEPONPONPEPONPONPONPEPONPONPONPREPON UKRESPONPEPONSEPONPONPON 1W Permintaan untuk mengeksekusi Bulk .setBulkactions (10000) // 1GB Data Refresh Bulk .setbulksize (Bytesizevalue baru (1, bytesizeunit.gb)) // diperbaiki 5s harus disegarkan sekali. Bersamaan dengan.SetConcurrentRentRequests (1) // Atur kembali, jalankan setelah 100ms, maksimum 3 permintaan.setBackoffpolicy (backofffpolicy.exponentialbackoff (timevalue.timevaluemillis (100), 3)) .build (); // tambahkan satu permintaan bulkprocessor.add (indexRequest baru ("twitter", "tweet", "1")); BulkProcessor.Add (New DeleTerequest ("Twitter", "Tweet", "2")); // Tutup BulkProcessor.Awaitclose (10, Timeunit.minutes); // atau bulkprocessor.close (); }} Kode TES2:
Paket com.wenbronk.javaes; impor java.net.inetsocketaddress; impor org.apache.lucene.queryparser.xml.filterbuilderfactory; impor org.elasticsearch.acticearch.multisearchresponse; impor org.elasticsearch.acticing.search.multisearchResponse; impor org.elasticsearch.acticearch.multisearchResponse; impor org.elascarcarsearch.acticle org.elasticsearch.action.search.searchResponse; impor org.elasticsearch.action.search.searchType; impor org.elasticsearch.client.transport.transportclient; impor org.elasticsearch.common.settings.settings; impor org.elelassearch.common.common.settings.settings; impor org.elelassearch.common.common.settings.settings; org org.elasticsearch.common.transport.inetsocketTransportAddress; impor org.elasticsearch.common.unit.timevalue; impor org.lasticsearch.index.Query.QueryBuilder; impor org.elasticsearch.index.Query.QueryBuerbuilder; impor orgearch.lasticsearch.index.Query.Querybuily; org.elasticsearch.search.agregations.agregasi; impor org.elasticsearch.search.agregations.agregations.agregationsbuilders; impor org.elasticsearch.search.agregations.bucket.histogram.dateHistogramInterval; impor org.elasticsearch.search.search.search.search.search.search.search.search.search.search.search.search.search.search.search.search.search.search.search.search.searsor org.elasticsearch.search.sort.sortparseelement; impor org.junit.before; impor org.junit.test;/** * Gunakan Java API untuk mengoperasikan Elasticsearch * Cari API * @Author 231 * */Kelas Publik Javaestest2 {Private TransportClient Client; / *** Dapatkan objek klien*/ @Before public void testBefore () {builder builder = settings.settingsbuilder (); builder.put ("cluster.name", "wenbronk_escluster"); // .put ("client.transport.ignore_cluster_name", true); Pengaturan Pengaturan = Builder.Build (); org.elasticsearch.client.transport.transportclient.builder transportBuild = transportClient.build (); TransportClient Client1 = TransportBuild.Settings (Pengaturan) .Build (); klien = client1.addtransportAddress ((inetsockettransportAddress baru (inetsocketAddress baru ("192.168.50.37", 9300))))); System.out.println ("Success Connect to Escluster"); }/*** kueri tes*/@test public void testSearch () {// SearchRequestBuilder SearchRequestBuilder = client.preparesearch ("Twitter", "Tweet", "1"); // SearchResponse Response = SearchRequestBuilder.Settypes ("Type1", "Type1", "Type1", "Type1", "Type1", "Type1", "Type1", "Type1", "Type1", "Type1", "Type1", "Type1, .setsearchType (searchType.dfs_query_then_fetch) // .setQuery (querybuilders.termQuery ("user", "test")) // .setpostfilter (querybuilders.setfrom ("usia"). dari (0) .to (1))/. .execute (). ActionGet (); SearchResponse Response = client.preparesearch () .execute (). ActionGet (); // searchHits hits = response.gethits (); // for (searchhit searchHit: hits) {// for (iterator <searchhitfield> iterator = searchhit.iterator (); iterator.hasnext; iterator.next (); // system.out.println (next.getValues ()); //} //} System.out.println (respons); } / *** Uji gulir API* Pemrosesan yang lebih efisien dari sejumlah besar data* / @test public void testsCrolls () {querybuilder querybuilder = querybuilders.termQuery ("twitter", "tweet"); SearchResponse Response = client.preparesearch ("twitter") .addsort (sortParSeElement.doc_field_name, sortorder.asc) .setscroll (new timevalue (60000)) .setQuery (queryBuilder) .setsize (100) .execute (). Action (); while (true) {for (searchHit hit: response.gethits (). gethits ()) {System.out.println ("I Am Coming"); } SearchResponse response2 = client.preparesearchScroll (response.getScrollid ()) .setscroll (new timevalue (60000)). Execute (). Actionget (); if (response2.gethits (). gethits (). length == 0) {System.out.println ("oh no ======="); merusak; }}} / ** * uji multisearch * / @test public void testMultisearch () {querybuilder qb1 = querybuilders.queryStringQuery ("Elasticsearch"); SearchRequestBuilder requestBuilder1 = client.preparesearch (). SetQuery (qb1) .setsize (1); Querybuilder qb2 = querybuilders.matchQuery ("user", "kimchy"); SearchRequestBuilder requestBuilder2 = client.preparesearch (). SetQuery (qb2) .setsize (1); Multisearchresponse multiresponse = client.preparemultiSearch (). Add (requestBuilder1) .add (requestBuilder2) .execute (). Actionget (); long nbhits = 0; untuk (MultisearchResponse.Item item: multiresponse.getResponse ()) {searchResponse response = item.getResponse (); nbhits = response.gethits (). getTotalHits (); SearchHit [] hits = response.gethits (). Gethits (); System.out.println (nbhits); }} / *** Kueri agregasi uji* / @test public void testaggregation () {SearchResponse Response = client.preparesearch () .setQuery (querybuilders.matchallQuery ()) // Gunakan kueri pertama untuk menyaring bagian dari it.addagregation (agregationbuild.terserms. .addaggregation (agregationBuilders.DateHistogram ("agg2"). Field ("Birth") .Interval (DateHistogramInterval.ear)) .Execute (). ActionGet (); Agregasi agregasi2 = response.getaggregations (). Get ("istilah"); Agregasi agregasi = response.getaggregations (). Get ("agg2"); // searchResponse response2 = client.search (new t akan yang baru (). SearchType (searchType.query_and_fetch)). Actionget (); } / ** * Tes di ujung * / @test public void testterminateAfter () {SearchResponse response = client.preparesearch ("twitter"). Setterminateafter (1000) .get (); if (response.isterMinatedearly ()) {System.out.println ("ternimate"); }} /** * Filter kueri: Lebih besar dari GT, kurang dari LT, kurang dari atau sama dengan LTE, lebih besar dari atau sama dengan gte * /@test public void testfilter () {secrearchResponse response = client.preparearch ("twitter") .settypes ("") .setQuery (querybuilders.minatchall .setsearchType (searchType.Query_then_fetch) // .setpostfilter (filterbuilders.rangeFilter ("usia"). Dari (0) .to (19) // .includelower (true) .ing .rangefilter ("usia"). gte (18) .lte (22)) .setexplain (true) // jelaskan benar untuk menunjukkan bahwa peringkat diurutkan sesuai dengan relevansi data, dan kata kunci pencocokan tertinggi ada di front.get (); } / *** Kueri grup* / @test public void testgroupby () {client.preparesearch ("twitter"). Setypes ("tweet") .setQuery (querybuilders.matchallQuery ()) .setsearchType (earchType.query_then_fetch) .addaggregation (agregation (earchtype.query_then_fetch) .addaggregation (aggregation (avgregation.query_then_fetch) .addaggregation (ngregation "(ngregation". .field ("user"). size (0) // grup menurut User // size (0) juga 10) .get (); }}Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.