システム環境:VM12の下でCENTOS 7.2
現在のインストールバージョン:ElasticSearch-2.4.0.tar.gz
Java操作ESクラスターステップ1:クラスターオブジェクト情報を構成します。 2:クライアントを作成します。 3:クラスター情報を表示します
1:クラスター名
デフォルトのクラスター名はElasticSearchです。クラスター名が指定されたものと矛盾している場合、ノードリソースを使用するとエラーが報告されます。
2:スニッフィング機能
client.transport.sniffを介してスニフ関数を起動して、クラスター内のノードを指定するだけで(必ずしもマスターノードではない)、クラスターに他のノードをロードする必要があります。このように、プログラムがシャットダウンし続ける限り、このノードがダウンしても、他のノードに接続できます。
3:クエリタイプSearchType.Query_Then_Fetch
ESクエリには4種類のクエリタイプがあります
query_and_fetch:
マスターノードは、すべてのシャードにクエリリクエストを配布します。各シャードは、独自のクエリルール、つまり単語頻度ドキュメント周波数に従ってソートおよびソートされ、結果をマスターノードに返します。マスターノードは、すべてのデータを要約してソートし、クライアントに返します。この方法では、ESとの相互作用が1回だけです。
このクエリ方法には、データのボリュームとソートに問題があります。メインノードは、すべてのシャードで返されるデータを要約して、データボリュームが比較的大きくなるようにします。第二に、各シャードのルールは一貫性がない場合があります。
query_then_fetch:
マスターノードは、すべてのシャードにリクエストを配布します。各シャードがソートされた後、データのIDとスコアがマスターノードに返されます。受信した後、マスターノードはそれを要約してソートし、ソートされたIDに従って対応するデータを対応するノードに読み取り、クライアントに返します。この方法では、ESとの相互作用が2回必要です。
このメソッドはデータボリュームの問題を解決しますが、ソートの問題はまだ存在し、ESのデフォルトクエリメソッドです
def_query_and_fetch:およびdfs_query_then_fetch:
スコアリングのために各シャードのルールを統合します。ソートの問題を解決しましたが、dfs_query_and_fetchにはまだデータボリュームの問題があり、dfs_query_then_fetchの両方が最良の問題を抱えていますが、効率は最悪です。
1.クライアントを取得し、取得する2つの方法
@before public void before()throws exception {map <string、string> map = new hashmap <string、string>(); map.put( "cluster.name"、 "elasticsearch_wenbronk"); settings.builder settings = settings.builder()。put(map); client = transportclient.builder()。settings(settings).build().addtransportaddress(new inetsockettransportaddress(inetaddress.getByname( "www.wenbronk.com")、integer.parseint( "9300")); } @before public void before11()スロー例外{//クライアントを作成し、デフォルトのクラスター名「elasticsearch "// client = transhbyclient.builder()。build()// .addtransportaddress(new inetsockettransportaddress(new inetaddress.getbyname(" www.wenbronk.com ")、9300); //設定オブジェクトを介してクラスター構成情報を指定し、構成されたクラスター名設定= settings.settingsbuilder()。 .put( "network.host"、 "192.168.50.37").put( "client.transport.ignore_cluster_name"、true)//クラスター名の確認を無視し、クラスター名がopening // .put( "client.transport.nodes_sampler_interbal" ////////// .put( "client.transport.ping_timeout"、5)//エラー、ping待ち時間、.build(); client = transportclient.builder()。settings(settings).build().addtransportaddress(new inetsockettransportadress(new inetsostantaddress( "192.168.50.37"、9300))); //デフォルト5s //接続を開くのにどれくらい時間がかかりますか、デフォルト5s System.out.println( "Success Connect"); }PS:公式ウェブサイトで与えられた2つの方法は使用できず、それらを使用するために組み合わせる必要があり、午後を無駄にしています...
他のパラメーターの意味:
コード:
パッケージcom.wenbronk.javaes; import java.net.inetadress; import java.net.inetsocketaddress; Import java.util.date; import java.util.hashmap; import java.util.list; import java.util.map; Import java.util.util.current.map; org.elasticsearch.bulk.backoffpolicy; Import org.elasticsearch.action.bulk.bulkprocessor; import org.elasticsearch.action.bulk.bulkprocessor.listener; Import org.elasticsearch.action.cride.bulk.bulkrecreate; Import.Elastics.bulk.bulk.bulk.bulk.bulk.bulk.bulk.bulk.bulk.bulk.bulk.bulk.bulk.bulk.bulk.bulk.bulk.bulk.bulk.bulk.bulk.bulk.bulk.bulk.bulk. org.elasticsearch.action.bulk.bulkresponse; Import org.elasticsearch.action.delete.deleterequest; Import org.elasticsearch.action.delete.deleteresponse; import org.elastics.crast.get.get.getResponse; Import org.elasticemresponse; org.elasticsearch.action.get.multigetresponse; Import org.elasticsearch.action.index.indexrequest; import org.elasticsearch.action.index.indexresponse; import org.elasticsearch.action.update.updateresponse; Import org.elastics.cupdate.update.update Elasticsearch.client.transport.transportclient; Import org.elasticsearch.cluster.node.discoverynode; Import org.elasticsearch.common.settings.settings; import org.elasticsearch.common.transport.inetsocktransportadress; org.elasticsearch.common.unit.bytesizevalue; Import org.elasticsearch.common.unit.timevalue; Import org.elasticsearch.common.xcontent.xcontentbuilder; Import org.elasticsearch.common.xcontent. org.junit.before; import org.junit.test; import com.alibaba.fastjson.jsonobject;/** * Java APIを使用してElasticsearch * * @author 231 * * */public class javaestest {private Transportclientクライアント;プライベートインデックスリクエストソース。 /***最初の方法* @throws例外* /// @before public void before()throws {map <string、string> map = new hashmap <string、string>(); map.put( "cluster.name"、 "elasticsearch_wenbronk"); settings.builder settings = settings.builder()。put(map); client = transportclient.builder()。settings(settings).build().addtransportaddress(new inetsockettransportaddress(inetaddress.getByname( "www.wenbronk.com")、integer.parseint( "9300")); }/ ***クラスター情報を表示*/ @test public void testinfo(){list <discoverynode> nodes = client.connectednodes(); for(discoveryNode node:nodes){system.out.println(node.gethostaddress()); }}/*** JSON文字列、方法1、直接スプライシング*/public string createjson1(){string json = "{" + "/" user/":/" kimchy/"、" + "/" postdate/":/" 2013-01-30/"、" + "/"メッセージjsonを返します。 } / ** * Mapを使用してJSONを作成 * / public Map <String、object> createjson2(){map <string、object> json = new hashmap <string、object>(); json.put( "user"、 "kimchy"); json.put( "postdate"、new date()); json.put( "Message"、 "Elasticsearchの試行"); jsonを返します。 } / *** fastjsonを使用して作成* / public jsonobject createjson3(){jsonobject json = new jsonobject(); json.put( "user"、 "kimchy"); json.put( "postdate"、new date()); json.put( "Message"、 "Elasticsearchの試行"); jsonを返します。 } / *** ESヘルプクラスを使用* / public xcontentBuilder createjson4()throws exception {// JSONオブジェクトを作成するJSON XContentBuilderソース= XContentFactory.jsonBuilder().startObject().field().field( "user"、 "kimy")。 elasticsearch ").endobject();返品ソース。 } / *** indexに保存* @throws例外* / @test public void test1()throws exception {xcontentBuilder source = createjson4(); // index index Response response = client.prepareindex( "twitter"、 "tweet"、 "1")。setSource(source).get(); // ressure index = response.getindex();文字列型= response.getType();文字列id = response.getId(); longバージョン= response.getversion(); boolean created = response.iscreated(); System.out.println(index + ":" + type + ":" + id + ":" + version + ":" + created); }/ *** api指定されたドキュメント情報を取得*/ @test public void testget(){// getResponse response = client.prepareget( "twitter"、 "tweet"、 "1")// .get(); getResponse応答= client.prepareget( "twitter"、 "tweet"、 "1").setoperationThReaded(false)// thread safe.get(); system.out.println(respons.getSourceasstring()); } / ** * delete delete api * / @test public void testdelete(){leteresponse response = client.preparedelete( "twitter"、 "tweet"、 "1").get();文字列index = response.getIndex();文字列型= response.getType();文字列id = response.getId(); longバージョン= response.getversion(); System.out.println(index + ":" + type + ":" + id + ":" + version); } / ** *更新アップデートAPI * UpdatereQuestオブジェクトを使用 * @Throws Exception * / @Test public void testUpdate()Throws Exception {updateRequest updateRequest = new updateRequest(); updaterequest.index( "Twitter"); updaterequest.type( "tweet"); updaterequest.id( "1"); updaterequest.doc(xcontentfactory.jsonbuilder().startobject()//存在しないフィールドの追加、既存のfields.field( "gender"、 "male").field( "message"、 "hello").endobject()); updateresponse応答= client.update(updaterequest).get(); //文字列index = response.getIndex();文字列型= response.getType();文字列id = response.getId(); longバージョン= response.getversion(); System.out.println(index + ":" + type + ":" + id + ":" + version); }/** *アップデートAPIをテストし、クライアント * @TROWS例外を使用 */@Test public void testUpdate2()スロー例外{//スクリプトオブジェクトで更新// updateresponse response = client.prepareupdate( "twitter"、 "tweet"、 "1")//。 // updateresponse response = client.prepareupdate( "twitter"、 "tweet"、 "1")// .setdoc(xcontentfactory.jsonbuilder()// .startobject()// .field( "gender"、 "malelele")// .endobject())。 // updaterequestオブジェクトとスクリプトの使用// updateresponse応答= client.update(updaterequest).get(); // updateresponse response = client.update(new updaterequest( "Twitter"、 "Tweet"、 "1").doc(xcontentfactory.jsonbuilder().startobject().field( "gender"、 "male").endobject()))。get(); get(); system.out.println(response.getIndex()); }/** *更新 * used updaterequest * @throws exception * @throws arturnedexception */@test public void testupdate3()throws interruptedexception、Exception {updateRequest updateRequest = new updateRequest( "Twitter"、 "tweet"、 "1").script( "ctx._sourcende.script(") updateresponse応答= client.update(updaterequest).get(); } / ** * test upsertメソッド * @throws例外 * * / @test public void testupsert()throws exception {//クエリ条件を追加し、効果的なIndexRequest indexRequest = new indexRequest( "Twitter"、 "Tweet"、 "2").Source(XContentEntFactory.JsonBuilder( "214" "214")。 .field( "gender"、 "gfrerq").endobject()); //更新を設定し、UpdateRequest Upsert = new UpdateRequest( "Twitter"、 "Twett"、 "2").doc(xcontentfactory.jsonbuilder().StartObject().field( "user"、 "wenbronk").endobject().upsert(indexrequest); client.update(upsert).get(); } / ** * Multi Get API *別のインデックス、タイプ、およびIDから取得 * "type"、 "foo").get(); for(multigetitemResponse itemResponse:multigetResponse){getResponse response = itemResponse.getResponse(); if(response.isexists()){string sourceasstring = response.getSourceasstring(); System.out.println(sourceasstring); }}} / ***バルクバッチ実行*クエリを更新または削除することができます。 bulkRequest.add(client.prepareIndex( "Twitter"、 "Tweet"、 "1").SetSource(xcontentFactory.jsonbuilder().StartObject().field( "user"、 "kimchy").field( "postdate"、new Date())。 bulkRequest.add(client.prepareIndex( "Twitter"、 "Tweet"、 "2").SetSource(xcontentFactory.jsonBuilder().StartObject().field( "user"、 "kimchy").field( "postdate"、new date())。 bulkResponse応答= bulkRequest.get(); system.out.println(respons.getheaders()); } / ** * bulk processor * @throws例外 * / @test public void testbulkprocessor()throws exception {// Bulkporcessor objectsussessesserbrocessor = bulkProcessor.builder(クライアント、新しいリスナー(){public byidbulk(long paramlong、bulkrequest parambulbrecreated)スタブ} //パブリックボイドアフターバークを実行する(長いパラマロング、バルクリケストパラメルクレクエスト、スロー可能なパラマリュー可能){//トッドオートジェネレーションメソッドスタブ}パブリックボイドアフターブルク(ロングパラメロ、バルクリクエストパラマクレクスト、bulkResponsバルクを実行するリクエスト.setBulkactions(10000)// 1GBデータ更新バルク.setBulksize(new bytesizevalue(1、bytesizeunit.gb))同時にsetconcurrentRequests(1)//セットバック、100ms後に実行、最大3 requests.setbackoffpolicy(backoffpolicy.exponentialbackoff(timevalue.timevaluemillis(100)、3)).build(); //単一のリクエストを追加するbulkprocessor.add(new indexRequest( "Twitter"、 "Tweet"、 "1")); bulkprocessor.add(new deleterequest( "Twitter"、 "Tweet"、 "2")); // bulkprocessor.awaitclose(10、timeunit.minutes); //またはbulkprocessor.close(); }} TES2コード:
パッケージcom.wenbronk.javaes; Import java.net.inetsocketAddress; Import org.apache.lucene.queryparser.xml.filterbuilderfactory; import org.elasticsearch.action.search.multisearchResponse; Import org.elasticsearch.action erg.elasticsearch.search.searchResponse; Import org.elasticsearch.action.search.searchtype; Import org.elasticsearch.client.transport.transportclient; import org.elasticsearch.common.settings.settings; import org.elasticsearch.common.settings.settings.builder elasticsearch.common.transport.inetsockettransportaddress; Import org.elasticsearch.common.unit.timevalue; Import org.elasticsearch.index.query.querybuilder; Import org.elasticsearch.index. query.querybuilders; Import.Lasticsearch.search.search.search.search.search.search.search.search org.elasticsearch.search.aggregations.aggregation; Import org.elasticsearch.search.aggregations.aggregations.aggregationsbuilders; Import org.elasticsearch.search.aggregations.bucket.histogram.datehistogrampogrampogrampogrampogrampogrampogrampogramporval; Import org.elasticsearch.search.search.search.search.search.search.search.search.search.search.search.search.search.seart.seart.seart.seart. org.elasticsearch.search.sort.sortparseelement; Import org.junit.before; import org.junit.test;/** * Java APIを使用してElasticsearch * search * @author 231 * */public class Javaestest2 {private Transportclient Client; / ***クライアントオブジェクトを取得*/ @before public void testbefore(){builder builder = settings.settingsbuilder(); builder.put( "cluster.name"、 "wenbronk_escluster"); // .put( "client.transport.ignore_cluster_name"、true);設定設定= builder.build(); org.elasticsearch.client.transport.transportclient.builder transportbuild = TransportClient.build(); TransportClient Client1 = TransportBuild.Settings(settings).build(); client = client1.addtransportaddress((new inetsostenttransportaddress(new inetsocketAddress( "192.168.50.37"、9300)))); system.out.println( "成功はesclusterに接続します"); }/*** test query*/@test public void testsearch(){// searchRequestBuilder searchRequestBuilder = client.preparesearch( "Twitter"、 "Tweet"、 "1"); // searchResponse Response = searchRequestBuilder.settypes( "Type1"、 "Type2")/////// .setearchType(searchType.dfs_query_then_fetch)// .setQuery(querybuilders.termquery( "user"、 "test")) .execute()。actionget(); searchResponse respons = client.preparesearch().execute()。actionget(); // searchhits hits = respons.gethits(); // for(searchhit searchhit:hits){// system.out.println(next.getValues()); //} //} system.out.println(response); } / ***スクロールapi*大量のデータのより効率的な処理* / @test public void testscrolls(){querybuilder querybuilder = querybuilders.termquery( "twitter"、 "tweet"); SearchResponse Response = client.preparesearch( "Twitter").addsort(sortparseelement.doc_field_name、sortorord.asc).setscroll(new TimeValue(60000)).setquery(querybuilder).setsize(100)execute().execute()。 while(true){for(searchhit hit:response.gethits()。gethits()){system.out.println( "I Am Coming"); } searchResponse Response2 = client.preparesearchscroll(respons.getScrollid()).Setscroll(new TimeValue(60000))。 if(response2.gethits()。gethits()。length == 0){system.out.println( "oh no ======");壊す; }}} / ** * test 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; for(multisearchResponse.item item:multiResponse.getResponse()){searchResponse respons = item.getResponse(); nbhits = response.gethits()。gettotalhits(); searchhit [] hits = response.gethits()。gethits(); system.out.println(nbhits); }} / *** Aggregation Query* / @test public void testaggregation(){searchResponse response = client.preparesearch().setQuery(querybuilders.matchallquery()//最初の使用クエリを使用して、IT.ADDAGGREGATION(AGGREGATIONBUILDERS.TERMES.TERMS.TERMS( ")の一部をフィルタリングします。 .Addaggregation(aggregationBuilders.DateHistogram( "AGG2")。field( "birts")。 aggregation aggregation2 = response.getaggregations()。get( "ターム");集約集約= response.getagGregations()。 } / ** * test terminate * / @test public void testterminatefter(){searchResponse response = client.preparesearch( "twitter")。setterminatefter(1000).get(); if(respons.istrmienearly()){system.out.println( "ternimate"); }} /** *フィルタークエリ:GTよりも大きく、LT未満、LTE以下、GTEよりも等しい、GTEよりも大きい * /@Test Public Void testFilter(){searchResponse Response = client.prepareSearch( "twitter").settypes( "").setquery(querybuilders.matchallquery() / /query() .setsearchType(searchType.query_then_fetch)// .setPostFilter(filterbuilders.rangefilter( "age")。(0).to(19)// .includelower(true).includeupper(true))// .setpostfilter(filterbuildefactory .rangefilter( "age")。gte(18).lte(22)).setexplain(true)//説明は、ランキングがデータの関連性に従ってソートされ、最高の一致キーワードが前面にあることを示すために真実です。 } / ***グループquery* / @test public void testgroupby(){client.preparesearch( "twitter")。setTypes( "tweet").setquery(querybuilders.matchallquery()).setsearchtype(searchtype.query_then_then_fetch)。 .field( "user")。size(0)//ユーザー//サイズ(0)も10).get(); }}上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。