Systemumgebung: CentOS 7.2 unter VM12
Aktuelle installierte Version: Elasticsearch-2.4.0.tar.gz
Java -Operation ES -Cluster Schritte 1: Konfigurieren von Cluster -Objektinformationen; 2: Client erstellen; 3: Clusterinformationen anzeigen
1: Clustername
Der Standard -Cluster -Name ist Elasticsearch. Wenn der Clustername mit dem angegebenen nicht im Widerspruch steht, wird ein Fehler bei der Verwendung von Knotenressourcen gemeldet.
2: Schnüffelfunktion
Starten Sie die Sniff -Funktion über Client.transport.sniff, so dass Sie nur einen Knoten im Cluster angeben müssen (nicht unbedingt einen Masterknoten) und dann andere Knoten im Cluster laden. Auf diese Weise können Sie, solange das Programm immer wieder heruntergefahren wird, trotzdem eine Verbindung zu anderen Knoten herstellen, auch wenn dieser Knoten untergeht.
3: Abfragetyp SearchType.query_then_fetch
Es gibt 4 Arten von Abfragetypen in der ES -Abfrage
Query_and_fetch:
Der Masterknoten verteilt die Abfrageanforderung an alle Scherben. Jede Shard wird nach ihren eigenen Abfrageregeln sortiert und sortiert, nämlich die Frequenz der Wortfrequenzdokument, und gibt das Ergebnis dann an den Masterknoten zurück. Der Master -Knoten fasst alle Daten zusammen und sortiert und gibt es an den Client zurück. Diese Methode erfordert nur einmal eine Interaktion mit ES.
Diese Abfragemethode hat Probleme mit dem Datenvolumen und Sortieren. Der Hauptknoten fasst die von allen Scherben zurückgegebenen Daten zusammen, damit das Datenvolumen relativ groß ist. Zweitens können die Regeln für jeden Shard inkonsistent sein.
Query_then_fetch:
Der Masterknoten verteilt die Anfrage an alle Scherben. Nachdem jede Shard sortiert wurde, werden die ID und die Punktzahl der Daten an den Master -Knoten zurückgegeben. Nach dem Empfangen fasst der Masterknoten ihn zusammen und sortiert ihn und liest dann die entsprechenden Daten dem entsprechenden Knoten gemäß der sortierten ID und gibt sie an den Client zurück. Diese Methode erfordert zweimal Interaktion mit ES.
Diese Methode löst das Datenvolumenproblem, das Sortierproblem besteht jedoch immer noch und ist die Standardabfragemethode von ES
Def_query_and_fetch: und dfs_query_then_fetch:
Vereinigen Sie die Regeln jeder Scherbe für die Wertung. Das Sortierproblem gelöst, aber dfs_query_and_fetch hat immer noch Datenvolumenprobleme, dfs_query_then_fetch haben beide das beste Problem, aber die Effizienz ist das Schlimmste.
1. erhalten Sie Kunden, zwei Möglichkeiten, um zu erhalten
@Before public void vor () löst Ausnahme aus {map <string, string> map = new HashMap <String, String> (); map.put ("cluster.name", "elasticsearch_wenbronk"); Einstellungen.Builder -Einstellungen = Settings.builder (). Put (MAP); client = transportclient.builder (). Einstellungen (Einstellungen) .build () .AddtransportAddress (New InetSocketTransportAddress (InetadDress.GetByName ("www.wenbronk.com"), Integer.ParseInt ("9300")); } @Before public void vor11 () löst Ausnahme aus {// Erstellen Sie den Client, verwenden Sie den Standard -Cluster -Namen "Elasticsearch" // client = transportclient.builder (). Build () // .addtransportAddress (new inetsockettransportaddress (inetadDres. // Geben Sie die Cluster -Konfigurationsinformationen über das Einstellungsobjekt und die konfigurierten Cluster -Namenseinstellungen Einstellungen = Settings.Settingsbuilder () an ("cluster.name", "Elasticsearch_wenbronk") // Setzen Sie den Clusternamen //. .put("network.host", "192.168.50.37") .put("client.transport.ignore_cluster_name", true) // Ignore cluster name verification, and can connect to the cluster name if the cluster name is incorrect after opening // .put("client.transport.nodes_sampler_interval", 5) // Report an error, // .put ("client.transport.ping_timeout", 5) // einen Fehler, Ping -Wartezeit, .build (); Client = TransportClient.builder (). Einstellungen (Einstellungen) .build () .AddtransportAddress (New InetSocketTransportAddress (New InetSocketaddress ("192.168.50.37", 9300)); // Standard 5S // Wie lange dauert es, die Verbindung zu öffnen, Standard 5S System.out.println ("Success Connect"); }PS: Die beiden von der offiziellen Website angegebenen Methoden können nicht verwendet werden, sie müssen kombiniert werden, um sie zu verwenden, und ich verschwende meinen Nachmittag ...
Die Bedeutung anderer Parameter:
Code:
Paket com.wenbronk.javaes; import java.net.inetaddress; import java.net.inetsocketaddress; import java.util.date; import Java.util.hashMap; org. org. org. org.elasticsarch.client.transport.transportclient; import org.elasticsearch.cluster.node.discovernode; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.transport.inetsSockettransportArtaddress; org. org.junit.before; import org.junit.test; import com.alibaba.fastjson.jsonObject;/** * Verwenden Sie die Java -API, um Elasticsearch * * @Author 231 * */Public Class Javaestest {private transportclient Client; private IndexRequest -Quelle; /*** Die Verbindung abrufen, den ersten Weg* @throws Exception* /// @before public void vor () löst Ausnahme aus {map <String, String> map = new HashMap <String, String> (); map.put ("cluster.name", "elasticsearch_wenbronk"); Einstellungen.Builder -Einstellungen = Settings.builder (). Put (MAP); client = transportclient.builder (). Einstellungen (Einstellungen) .build () .AddtransportAddress (New InetSocketTransportAddress (InetadDress.GetByName ("www.wenbronk.com"), Integer.ParseInt ("9300")); }/ *** Clusterinformationen anzeigen*/ @test public void testinfo () {list <DiscoveryNode> nodes = client.connectednodes (); für (DiscoveryNode -Knoten: Knoten) {System.out.println (node.gethostadDress ()); }}/*** organisieren JSON-Zeichenfolgen, Methode 1, direkt Spleißen*/public String createjson1 () {String json = "{" + "/" Benutzer/":/" kimchy/"," + "/" postdate/":/" 2013-01-30/"," + "/" Message/"Message/" Message/"Message/" ". Rückkehr JSON; } / ** * JSON mit Karte erstellen * / public map <string, Object> createjson2 () {map <String, Objekt> json = new HashMap <String, Object> (); json.put ("Benutzer", "Kimchy"); json.put ("postdate", New Date ()); json.put ("message", "elasticsearch aus ausprobiert"); Rückkehr JSON; } / *** mit Fastjson erstellen* / public JsonObject CREATEJSON3 () {JSONObject json = new JsonObject (); json.put ("Benutzer", "Kimchy"); json.put ("postdate", New Date ()); json.put ("message", "elasticsearch aus ausprobiert"); Rückkehr JSON; } / *** Verwenden Sie ES Help -Klasse* / public XContentBuilder createjson4 () Auslässig Ausnahme {// JSON -Objekt erstellen, eine der Möglichkeiten, JSON XContentBuilder Source = XContentFactory.jsonBuilder (). Elasticsearch ") .endObject (); Quelle zurückkehren; } / *** im Index speichern* @throws Exception* / @test public void test1 () löst Ausnahme aus {xcontentBuilder Source = createjson4 (); // JSON in der Index indexresponse response = client.prepareIndex ("Twitter", "Tweet", "1"). SetSource (Quelle) .get (); // // Das Ergebnis wird string index = response.getIndex () erhalten; String type = response.gettType (); String id = response.getId (); Long Version = response.getversion (); boolean erstellt = response.iscreated (); System.out.println (Index + ":" + Typ + ":" + id + ":" + Version + ":" + erstellt); }/ *** API erhalten Sie die angegebenen Dokumentinformationen*/ @test public void testget () {// getResponse response = client.prepareet ("Twitter", "Tweet", "1") // .get (); GetResponse response = client.prepareet ("Twitter", "Tweet", "1") .setOperationsthread (false) // Thread safe.get (); System.out.println (response.getSourceAsString ()); } / ** * Testen Sie API löschen * / @test public void testDelete () {Deleteresponse response = client.prepreparedElete ("Twitter", "Tweet", "1") .get (); String index = response.getIndex (); String type = response.gettType (); String id = response.getId (); Long Version = response.getversion (); System.out.println (Index + ":" + Typ + ":" + id + ":" + Version); } / ** * Testen aktualisieren api UpdateRequest.Index ("Twitter"); UpdateRequest.Type ("Tweet"); updateRequest.id ("1"); updateRequest.doc (xcontentFactory.jsonBuilder () .StartObject () // Felder hinzufügen, die nicht existieren, ersetzen vorhandene Felder.field ("Geschlecht", "männlich") .field ("Nachricht", "Hallo") .endObject ()); UpdateResponse response = client.update (updateRequest) .get (); // String String index = response.getIndex (); String type = response.gettType (); String id = response.getId (); Long Version = response.getversion (); System.out.println (Index + ":" + Typ + ":" + id + ":" + Version); }/** * Testen Sie die Aktualisierungs -API, verwenden Sie Client * @Trows Exception */@test public void testupdate2 () Auslöst Ausnahme {// mit Skriptobjekt // UpdateResponse response = client.prepareupdate ("Twitter", "Tweet", "1") // .Setscript (New Script ("/hits._s._sure.gender // updateResponse response = client.prepareupdate ("Twitter", "Tweet", "1") // .setDoc (xcontentFactory.jsonBuilder () // .StartObject () // .field ("Geschlecht", "Malelelele") // .endObject (). Get (); // updateRequest -Objekt und Skript verwenden // UpdateRequest updateRequest = new UpdateRequest ("Twitter", "Tweet", "1") // .Script (neues Skript ("ctx._source.gender =/" male/""); // updateResponse response = client.update (updateRequest) .get (); // updateResponse response = client.update (new UpdateRequest ("Twitter", "Tweet", "1") .doc (xcontentFactory.jsonBuilder () .StartObject () .field ("Geschlecht", "männlich"). System.out.println (response.getIndex ()); }/** * TEST -UPDATE * Verwenden Sie UpdateRequest * @throws Exception * @throws InterruptedException */@Test public void testupdate () löscht InterruptedException aus {UpdateRequest updateRequest = new UpdateRequest ("Twitter", "Tweet", "1"). UpdateResponse response = client.update (updateRequest) .get (); } / ** * Testen Sie Upsert -Methode * @throws Exception * * / @test public void testupSert () löst Ausnahme aus {// Die Abfragebedingungen setzen, den effektiven IndexRequest IndexRequest = new indexRequest ("Twitter", "Tweet", "2") .Source (xcontentFactory.JsonBuilder (). .Field ("Geschlecht", "gfrerq") .endObject ()); // Aktualisierung einstellen, Update -Einstellungen unter updateRequest upsert = new UpdateRequest ("Twitter", "Tweet", "2") .doc (xcontentFactory.jsonBuilder () .StartObject () .field ("Benutzer", "Wenbronk") .endObject () .upssert (). Client.Update (upsert) .get (); } / ** * Testen Sie Multi Get api * Get aus verschiedenen Index-, Typ- und ID- und ID * / @test public void testMultiget () {multigetResponse multigetResponse = client.preparemultiget () .add ("Twitter", "Tweet", "1") .Add ("Twitter", "Ein", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", "," "Typ", "foo") .get (); für (multigetItemResponse itemResponse: multigErsponse) {getResponse response = itemResponse.getResponse (); if (response.iseExists ()) {String SourCeasString = response.getSourceAsString (); System.out.println (SourceasString); }}} / *** Bulk -Batch -Ausführung* Eine Abfrage kann aktualisiert werden oder mehrere Dokumente löschen BulkRequest.add (Client.prepareIndex ("Twitter", "Tweet", "1") .setSource (xcontentFactory.jsonBuilder () .startObject () .field ("Benutzer", "Kimchy") .field ("postdate", neues Datum (). BulkRequest.add (Client.prepareIndex ("Twitter", "Tweet", "2") .setSource (xcontentFactory.jsonBuilder () .StartObject () .field ("Benutzer", "Kimchy") .field ("postdate", neues Datum (). BulkResponse response = bulkRequest.get (); System.out.println (response.Getheaders ()); } /** * Use bulk processor * @throws Exception */ @Test public void testBulkProcessor() throws Exception { // Create BulkPorcessor objectBulkProcessor bulkProcessor = BulkProcessor.builder(client, new Listener() { public void beforeBulk(long paramLong, BulkRequest paramBulkRequest) { // TODO Automatisch generierte Methode Stub} // public void Afterbulk (lang Paramlong, Bulkrequest Parambulkrequest, Throwable Paramtowsable) {// Todo automatisch generierter Methode Stub} Public void Afterbulk (Long Paramlong, Bulkrequest Parambulkrequest, Bulkresponbonse-Strohkrequest, Bulkresponse-Parambulse-Strohkresponse) {{{{{{{{{-Do-doxer-dohrung) -Methode, Bulkresponse-Parambonsed), {{{{oder bulkresponse) {{{{{{{{{{{{{{{{{{{{{-Doquest), Bulkresponse, {{oder }}) // 1W -Anfragen zur Ausführung von Bulk .SetBulkactions (10000) // 1 GB Daten Aktualisierung Bulk. 1 darf gleichzeitig ausgeführt werden. // Fügen Sie eine einzige Anfrage zu bulkProcessor.add (neuer IndexRequest ("Twitter", "Tweet", "1")); BulkProcessor.add (neu DeleterQuest ("Twitter", "Tweet", "2")); // schließen bulkProcessor.awaitclose (10, TimeUnit.minutes); // oder bulkProcessor.close (); }} TES2 -Code:
Paket com.wenbronk.javaes; import java.net.inetsocketaddress; import org.apache.lucene.queryparser.xml.filterbuilderFactory; org.elasticsearch.action.search.searchResponse; import org.elasticsearch.action.search.searchtype; import org.elasticsearch.client.transport.transportclient; import org.elasticsarch.common.settings org. org. org. / *** Client -Objekt erhalten*/ @before public void testBefore () {Builder Builder = Settings.Settingsbuilder (); Builder.put ("cluster.name", "Wenbronk_escluster"); // .put ("client.transport.ignore_cluster_name", true); Einstellungen Einstellungen = builder.build (); org.elasticsearch.client.tranport.transportclient.builder transportbuild = transportClient.build (); TransportClient Client1 = TransportBuild.Setings (Einstellungen) .build (); client = client1.addtransportAddress ((New InetSocketTransportAddress (New InetSocketaddress ("192.168.50.37", 9300)))); System.out.println ("Erfolg mit Escluster Connect"); }/*** Testen Sie Abfrage*/@test public void testSearch () {// SearchRequestBuilder SearchRequestBuilder = client.prepareSearch ("Twitter", "Tweet", "1"); // SearchResponse Antwort = SearchRequestBuilder.settTypes ("Typ11", "Typ 2") // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // .SetSearchType (SearchType.dfs_query_then_fetch) // .setQuery (querybuilders.terMQuery ("Benutzer", "test") //setpostfilter (querybuilders.RangeQuery ("Alter"). From (0) .to (1) //Setfrom (). .execute (). actionGet (); SearchResponse response = client.prepareSearch () .execute (). ActionGet (); // searchhits hits = response.gethits (); // für (SearchHit SearchHit: hits) {// für (iterator <searchhitfield> iterator = suchhit.iterator (); System.out.println (next.getValues ()); //} //} System.out.println (Antwort); } / *** Tester Scroll API* Effizientere Verarbeitung großer Datenmengen* / @test public void testscrolls () {queryBuilder queryBuilder = queryBuilders.terMQuery ("Twitter", "Tweet"); SearchResponse response = client.prepareSearch ("Twitter") .Addsort (sortParseelement.doc_field_name, sortOrder.asc) .setscroll (neuer Zeitwert (60000) .SetQuery (QueryBuilder) .setSize (100) .execute (). ActionGet (); while (true) {for (searchHit hit: response.gethits (). gethits ()) {System.out.println ("Ich komme"); } SearchResponse response2 = client.prepareSearchScroll (response.getScrollid ()) .setsCroll (neuer Zeitwert (60000)). Execute (). Actionget (); if (response2.gethits (). jethits (). length == 0) {System.out.println ("oh no ======"); brechen; }}} / ** * multisearch testen * / @test public void testMultisearch () {queryBuilder qb1 = querybuilders.queryStringQuery ("elasticsearch"); SearchRequestBuilder RequestBuilder1 = client.prePareSearch (). SetQuery (qb1) .setSize (1); QueryBuilder qb2 = querybuilders.matchQuery ("Benutzer", "Kimchy"); SearchRequestBuilder RequestBuilder2 = client.preparesearch (). SetQuery (qb2) .setSize (1); MultisearchResponse multiresponse = client.preparemultisearch (). Add (RequestBuilder1) .Add (RequestBuilder2) .execute (). ActionGet (); lange Nbhits = 0; for (multisearchResponse.Item item: multiresponse.getResponse ()) {SearchResponse Antwort = item.getResponse (); nbhits = response.gethits (). getTotalhits (); SearchHit [] Hits = Antwort.gethits (). Gethits (); System.out.println (Nbhits); }} / *** Test Aggregation Abfrage* / @test public void testaggRegation () {SearchResponse response = client.prePareSearch () .setQuery (querybuilders.matchAllQuery ()) // Verwenden Sie zunächst Abfrage, um einen Teil von IT.Addaggregation (AggregationBuilders.terms. "). .addaggregation (AggregationBuilders.datehistogram ("Agg2"). Feld ("Geburt") .Interval (DateHistograminterval.YEAR) .execute (). actionget (); Aggregation Aggregation2 = Antwort.GetAggregations (). Get ("Term"); Aggregation Aggregation = Antwort } / ** * Test terminate * / @test public void teststerminateenather () {SearchResponse response = client.preparesearch ("Twitter"). Setterminate nach (1000) .get (); if (response.isterMinatearly ()) {System.out.println ("ernimate"); }} /** * Filterabfrage: größer als gt, weniger als lt, weniger oder gleich LTE, größer oder gleich gte * /@Test public void testfilter () {SearchResponse -Antwort = client.preparessearch ("Twitter"). .SetSearchType (suchtyp.query_then_fetch) // .setPostFilter (filterbuilders.RangeFilter ("Alter"). Von (0) .to (19) // .includelower (true). .RangeFilter ("Alter"). gte (18) .lte (22)) .SetExplain (true) // Erklären können angibt, dass das Ranking nach der Datenrelevanz sortiert wird und das höchste übereinstimmende Schlüsselwort vorne.get (); } / *** Gruppenabfrage* / @test public void testGroupBy () {client.prepareSearch ("Twitter"). .Field ("Benutzer"). Größe (0) // Gruppe nach Benutzer // Größe (0) ist ebenfalls 10) .get (); }}Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.