시스템 환경 : VM12에 따른 Centos 7.2
현재 설치된 버전 : Elasticsearch-2.4.0.tar.gz
Java 작동 ES 클러스터 단계 1 : 클러스터 개체 정보 구성; 2 : 클라이언트 생성; 3 : 클러스터 정보를 봅니다
1 : 클러스터 이름
기본 클러스터 이름은 ElasticSearch입니다. 클러스터 이름이 지정된 이름과 일치하지 않으면 노드 리소스를 사용할 때 오류 가보고됩니다.
2 : 스니핑 기능
Client.transport.sniff를 통해 Sniff 함수를 시작하므로 클러스터의 노드 만 지정 해야하는 다음 클러스터에 다른 노드를로드해야합니다. 이런 식으로 프로그램이 계속 종료되는 한,이 노드가 다운 되어도 여전히 다른 노드에 연결할 수 있습니다.
3 : 쿼리 타입 searchType.query_then_fetch
ES 쿼리에는 4 가지 유형의 쿼리 유형이 있습니다.
query_and_fetch :
마스터 노드는 모든 샤드에 쿼리 요청을 배포합니다. 각 샤드는 자체 쿼리 규칙, 즉 단어 주파수 문서 주파수에 따라 정렬되고 정렬됩니다. 그런 다음 결과를 마스터 노드에 반환합니다. 마스터 노드는 모든 데이터를 요약하고 정렬하여 클라이언트로 반환합니다. 이 방법은 ES와 한 번만 상호 작용하면됩니다.
이 쿼리 방법에는 데이터 볼륨 및 정렬에 문제가 있습니다. 기본 노드는 데이터 볼륨이 비교적 커질 수 있도록 모든 샤드가 반환 한 데이터를 요약합니다. 둘째, 각 샤드의 규칙은 일관성이 없을 수 있습니다.
query_then_fetch :
마스터 노드는 모든 파편에 요청을 배포합니다. 각 샤드가 정렬 된 후에는 데이터의 ID 및 점수가 마스터 노드로 반환됩니다. 수신 후 마스터 노드는이를 요약하고 정렬 한 다음 정렬 된 ID에 따라 해당 노드에 해당 데이터를 읽고 클라이언트로 반환합니다. 이 방법은 ES와 두 번 상호 작용해야합니다.
이 방법은 데이터 볼륨 문제를 해결하지만 분류 문제는 여전히 존재하며 ES의 기본 쿼리 메소드입니다.
def_query_and_fetch : 및 dfs_query_then_fetch :
득점을 위해 각 샤드의 규칙을 통합하십시오. 정렬 문제를 해결했지만 DFS_QUERY_AND_FCHET는 여전히 데이터 볼륨 문제가 있지만 DFS_QUERY_THEN_FETCH는 모두 최상의 문제가 있지만 효율성은 최악입니다.
1. 클라이언트를 얻는 두 가지 방법을 얻습니다
@public void wefore ()는 예외 {map <string, string> map = new Hashmap <String, String> (); map.put ( "cluster.name", "elasticsearch_wenbronk"); settings.builder settings = settings.builder (). put (map); client = rantipclient.builder (). 설정 (설정) .build () .addtransportAddress (new inetSockettransportAddress (inetAddress.getByName ( "www.wenbronk.com"), integer.parseint ( "9300")); } @public void preverows exception {// 클라이언트 생성, 기본 클러스터 이름 "elasticsearch"// client = rantlicantclient.builder (). build () //addtransportAddress (new inetAdcockttransportAddress (inetAddress.getbyname ( "www.wenbronk.com"))를 사용합니다. // 설정 객체와 구성된 클러스터 이름 설정을 통해 클러스터 구성 정보를 지정합니다. 설정 = settings.settingsBuilder (). put ( "cluster.name", "elasticsearch_wenbronk") // 클러스터 이름 설정 //. put ( "client.transport.sniff", true) // sniff가 연결되지 않습니다. .put ( "Network.Host", "192.168.50.37") .put ( "client.transport.ignore_cluster_name", true) // 클러스터 이름 확인을 무시하고 클러스터 이름이 클러스터 이름에 연결할 수 있습니다. .put ( "client.transport.ping_timeout", 5) // 오류보고, Ping Waiting Time, .build (); client = rantipclient.builder (). settings (settings) .build () .addtransportAddress (new inetSockettransportAddress (new inetSocketAddress ( "192.168.50.37", 9300)); // 기본 5S // 연결을 열는 데 얼마나 걸립니까, 기본 5S System.out.println ( "성공 연결"); }추신 : 공식 웹 사이트에서 제공 한 두 가지 방법은 사용할 수 없으며 사용하려면 결합해야하며 오후를 낭비하고 있습니다 ...
다른 매개 변수의 의미 :
암호:
패키지 com.wenbronk.javaes; import java.net.inetaddress; import java.net.inetsocketaddress; import java.util.date; import java.util.hashmap; import java.util.list; import java.util.map; import java.util.current.current.unit; import; org.elasticsearch.action.bulk.bolk.backoffpolicy; import org.elasticsearch.action.bulk.bulkprocessor; import org.elasticsearch.action.bulk.bulkprocessor.listener; import org.elasticsearch.action.bulk.bulkrequest; import; org.elasticsearch.action.bulk.bulk.bulkrequestbuilder; import org.elasticsearch.action.bulk.bulkresponse; import org.elasticsearch.action.delete.deletequest; import org.elasticearch.action.delete.deleteresprons; import org.elasticsearch.caption.getrresponse; org.elasticsearch.action.get.multigetitemresponse; import org.elasticsearch.action.come.get.multigetresponse; import org.elasticsearch.action.index.indexrequest; import org.elasticsearch.action.index.indexresponse; import org.elasticsearch.action.aptate.updateronge; import; org.elasticsearch.action.update.updateresponse; import org.elasticsearch.client.transport.transportclient; import org.elasticsearch.cluster.node.discoverynode; import org.elasticsearch.common.settings. import org.elasticsearch.comport.transport.inetsporttress; org.elasticsearch.common.unit.bytesizeunit; import org.elasticsearch.common.unit.bytesizevalue; import org.elasticsearch.common.unit.timevalue; import org.elasticsearch.common.xcontent.xcontentbuilder; import org.elasticsearch.common.xcontent.xcontentFactory; import org.elasticsearch.script.script; import org.junit.before; import org.junit.test; import com.alibaba.fastjson.jsonobject;/** * java api를 사용하여 elasticsearch * @author 231 운송 클라이언트 클라이언트; 개인 인덱스 퀘스트 소스; /*** 연결을 얻습니다. 첫 번째 방법* @throws 예외* /// @before public void 이전 () 예외 {map <string, String> map = new Hashmap <String, String> (); map.put ( "cluster.name", "elasticsearch_wenbronk"); settings.builder settings = settings.builder (). put (map); client = rantipclient.builder (). 설정 (설정) .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 () { " +"/"{" + "/"user/":/"kimchy/"," + "/"postDate/":/"2013-01-30/"," + "/"message/":/"chonestics Insearch/"}"} "; json 리턴; } / ** * 맵 * / public map <string, object> createjson2 () {map <string, object> json = new Hashmap <String, Object> (); json.put ( "사용자", "kimchy"); json.put ( "postdate", new date ()); JSON.PUT ( "메시지", "엘라스틱 검색 시도"); json 리턴; } / *** fastjson을 사용하여 생성* / public jsonobject createjson3 () {jsonobject json = new jsonobject (); json.put ( "사용자", "kimchy"); json.put ( "postdate", new date ()); JSON.PUT ( "메시지", "엘라스틱 검색 시도"); json 리턴; } / *** ES HELP 클래스 사용* / public XContentBuilder CreateJSON4 ()는 예외를 던져 {// JSON 객체 만들기, JSON XCONTENTBUILDER 소스 = XCONTENTBUILDER 소스 = XCONTENTFACTORY.JSONBUILDER () .STARTOBJECT () .field ( "사용자", "Kimchy") elasticsearch ") .endoBject (); 리턴 소스; } / *** 색인을 저장* @Throws Exception* / @test public void test1 ()는 예외를 던지려면 {xcontentBuilder source = createjson4 (); // 인덱스에 JSON을 저장 인덱스 문자 응답 = client.prepareIndex ( "twitter", "tweet", "1"). setSource (source) .get (); // // 결과는 문자열 index = responce.getIndex (); 문자열 유형 = response.getType (); 문자열 id = response.getId (); 긴 버전 = response.getVersion (); 부울 생성 = response.iscreated (); System.out.println (index + ":" + type + ":" + id + ":" + version + ":" + 생성); }/ *** 지정된 문서 정보를 얻습니다*/ @test public void testget () {// getResponse response = client.prepareget ( "twitter", "tweet", "1") // .get (); getResponse response = client.prepareget ( "twitter", "tweet", "1") .setOperationTheRreaded (false) // Thread Safe.get (); System.out.println (response.getSourceasString ()); } / ** * 테스트 테스트 api * / @test public void testdelete () {deleterPonse response = client.preparedElete ( "twitter", "tweet", "1") .get (); 문자열 index = response.getIndex (); 문자열 유형 = response.getType (); 문자열 id = response.getId (); 긴 버전 = response.getVersion (); System.out.println (index + ":" + type + ":" + id + ":" + 버전); } / ** * 테스트 업데이트 업데이트 API * updateRequest 객체 사용 * @Throws Exception * / @test public void testupdate () rows exception {updateRequest updateRequest = new updateRequest (); updateRequest.index ( "Twitter"); updateRequest.type ( "트윗"); updateRequest.id ( "1"); updateRequest.doc (xcontentFactory.jsonBuilder () .startObject () // 존재하지 않는 필드를 추가하고 기존 필드를 교체합니다 ( "gender", "male") .Field ( "hello") .endObject ()); updateResponse 응답 = client.update (updateRequest) .get (); // 인쇄 문자열 index = response.getIndex (); 문자열 유형 = response.getType (); 문자열 id = response.getId (); 긴 버전 = response.getVersion (); System.out.println (index + ":" + type + ":" + id + ":" + 버전); }/** * 업데이트 API를 테스트하고 클라이언트 사용 * @Trows Exception */@test public void testupdate2 ()는 예외를 던져 {// script 객체로 업데이트 됨 // updateResponse response = client.prepareUpdate ( "twitter", "1") // .setscript ( "hits._source.gender =/")))))))). // updateResponse response = client.prepareupdate ( "twitter", "tweet", "1") // .setDoc (xcontentFactory.jsonBuilder (.SonBuilder.jsonBuilder (.startObject () // .field ( "gender") // .endobject ()). get (); // updateRequest 객체 및 스크립트 사용 // updateRequest updateRequest = new updateRequest ( "Twitter", "tweet", "1") // .script (새 스크립트 ( "ctx._source.gender =/"male/"")); // updateResponse 응답 = client.update (updateRequest) .get (); // updateResponse response = client.update (새 updateRequest ( "twitter", "tweet", "1") .doc (xcontentFactory.jsonBuilder () .SonBuilder () .SonBuilder ( "gender", "male") .endObject ()). get (); System.out.println (response.getIndex ()); }/** * 테스트 업데이트 * updateRequest 사용 * @Throws Exception * @throws InterruptedException */@test public void testupdate3 ()는 InterpruptedException, 예외 {updateRequest updateRequest = new UpdateRequest ( "twitter", "tweet", "1") ( "ctx._SOURCE =/"); updateResponse 응답 = client.update (updateRequest) .get (); } / ** * 테스트 Upsert 방법 * @throws Exception * * / @test public void testupsert ()는 예외를 던져 {// 쿼리 조건을 설정하고 효과적인 indexrequest request = "twitter", "tweet", "2") .Source (xcontentContory.jsonBuilder (). " .field ( "성별", "gfrerq") .endoBject ()); // 업데이트 설정, 아래에서 업데이트 설정을 찾으십시오. UpdateRequest Upsert = New UpdateRequest ( "Twitter", "Tweet", "2") .doc (xcontentFactory.jsonBuilder () .StarBject () .field ( "user") .endoBject () .EndObject () .upSert (IndexRquest); client.update (upsert) .get (); } / ** * Test Multi Get Api * 다른 색인, 유형 및 ID에서 얻는다 * / @Test public void testmultiget () {multiGetresponse multiGeTresponse = client.preparemultIget () .add ( "트위터", "트위터", "1") "foo") .get (); for (multiGeTitemResponse itemResponse : multiGeTrepResponse) {getResponse reponse = itemResponse.getResponse (); if (response.isexists ()) {string sourceasstring = response.getSourceasstring (); System.out.println (sourceasstring); }}} / *** 대량 배치 실행* 쿼리를 업데이트하거나 여러 문서를 삭제할 수 있습니다* / @test public void testBulk ()는 예외 {bulkRequestBuilder bulkRequest = client.preparebulk (); 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 (response.getheaders ()); } / ** * 대량 프로세서 사용 * @Throws Exception * / @Test public void testBulkProcessor () 던지기 예외 {// bulkporcessor objectBulkProcessor bulkProcessor = bulkprocessor.builder (클라이언트, New Lister () {public void prectionbulk (long paramlong, bulkrequest parambulkepest parambulkepest) 자동 생성 메소드 스텁} // 공개 무효 애프터 볼크 (long paramlong, bulkrequest parambulkrequest, 던질 가능한 매개 변수) {// todo 자동 생성 메소드 스터브} public void afterbulk (long paramlong, bulkrequest parambulkrequest, bulkreprenceance) {// to-go-go-go-go-go-go-go-go-go-go-go-go-go-gogal void afterbulk (long paramlong, bulkrequest parambulkrequest) }) // 1W 대량 .setBulKactions (10000) // 1GB 데이터를 실행하도록 요청하는 요청 // 1GB 데이터 새로 고침 대량 .setBulksize (새로운 ByTesizeValue (1, bytesize.gb)) // 고정 5는 한 번 새로 고쳐야합니다. 동시에 실행 .setConcurrentRequests (1) // 다시 설정하고 100ms 후에 실행, 최대 3 requests.setbackoffpolicy (backoffpolicy.exponential backoff (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.search.searcher import; org.elasticsearch.action.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 import; org.elasticsearch.common.transport.inetsockettransportaddress; import org.elasticsearch.common.unit.timevalue; import org.elasticsearch.index.query.querybuilder; import org.elasticsearch.query.querybuilders import org.elastics.search.searchhit; org.elasticsearch.search.aggregations.aggregation; import org.elasticsearch.search.aggregations.aggregations.aggregationsbuilders; import org.elasticsearch.search.aggregations.bucket.histogram.datehistograminterval; import org.elasticsearch.search.sort.sort.sort.sort; org.elasticsearch.search.sort.sortparseelement; import org.junit.before; import org.junit.test;/** * Java API를 사용하여 Elasticsearch * api * @author 231 */public class javaestest2 {private transportclient client; / *** 클라이언트 객체 가져 오기*/ @public void testbeforefore () {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 = rantperclient.build (); TransportClient Client1 = TransportBuild.Settings (설정) .Build (); client = client1.addtransportAddress ((새로운 inetSockettransportAddress (새로운 inetSocketAddress ( "192.168.50.37", 9300))); System.out.println ( "성공적인 Escluster에 연결"); }/*** 테스트 쿼리*/@test public void testsearch () {// searchRequestBuilder SearchRequestBuilder = client.preparesearch ( "twitter", "tweet", "1"); // searchResponse responsk = searchRequestBuilder.setTypes ( "type1", "type2") // .SearchType (searchType.dfs_Query_THEN_TETH) // .SETQUERY (QueryBuilders.termquery ( "사용자", "테스트")) // .setPostFilter (QueryBuilders.rangeQuery ( "Age"). (1)). .Execute (). ActionGet (); searchResponse response = client.preparesearch () .execute (). actionget (); // searchHits hits = respect.gethits (); // for (searchHit searchHit : hits) {// for (iterator <searchHitfield> iterator = searchHit.terator (); iterator.hasnext (); System.out.println (next.getValues ()); //} //} system.out.println (응답); } / *** 테스트 스크롤 API* 대량의 데이터에 대한보다 효율적인 처리* / @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) .SetStize (100) .Execute (). ActionGet (); 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 ======"); 부서지다; }}} / ** * 테스트 다중 검색 * / @test public void testmultisearch () {QueryBuilder QB1 = QueryBuilders.queryStringQuery ( "Elasticsearch"); searchRequestBuilder requestBuilder1 = client.preparesearch (). setQuery (qb1) .setsize (1); QueryBuilder QB2 = QueryBuilders.matchQuery ( "사용자", "Kimchy"); searchRequestBuilder requestBuilder2 = client.preparesearch (). setQuery (qb2) .setsize (1); multiSearchResponse multiresponse = client.preparemultisearch (). add (requestBuilder1) .add (requestBuilder2) .execute (). actionget (); 긴 nbhits = 0; for (multiSearchResponse.Item 항목 : multiResponse.getResponse ()) {searchResponse reponse = item.getResponse (); nbhits = response.gethits (). getTotalHits (); searchHit [] hits = response.gethits (). gethits (); System.out.println (nbhits); }} / *** 테스트 집계 쿼리* / @test public void recenaggregation () {searchResponse response = client.preparesearch () .setQuery (QueryBuilders.matchallQuery ()) // 쿼리를 사용하여 query를 필터링하기 위해 query (AggregationBuilders.termms ( "User")). .adaggregation (AggregationBuilders.dateHistogram ( "agg2"). field ( "birth") .interval (dateHistOgramInterVal.year)) .Execute (). actionget (); Aggregation Aggregation2 = response.getAggregations (). get ( "term"); Aggregation Aggregation = response.getAggregations (). get ( "agg2"); // searchResponse response2 = client.search (new SearchRequest (). searchType (searchType.query_and_fetch)). ActionGet (); } / ** * 테스트 종료 * / @test public void testterminatinatecter () {searchResponse response = client.preparesearch ( "Twitter"). setterminatect (1000) .get (); if (response.isterminateEarly ()) {system.out.println ( "Ternimate"); }} /** * 필터 쿼리 : GT보다 크고 LT보다 크거나 LT보다 적거나 LTE보다 작거나 동일하며 GTE * /@Test Public void testFilter () {searchResponse response = client.preparesearch ( "Twitter") .setTypes ( "") .SetQuery (QueryBuery (QueryBuilers.matchallquery ()) // query all all all all alle .SearchType (searchType.query_then_fetch) // .setpostFilter (filterBuilders.RangeFilter ( "age"). from (0). (19) // .includelower (true) .includeUpper (true)) // .setpostfilter (filterBuilderFactory .RangeFilter ( "Age"). gte (18) .lte (22)) .setexplain (true) // 설명은 데이터 관련성에 따라 순위가 정렬되고 가장 일치하는 키워드가 Front.get ()에 있음을 나타냅니다. } / *** Group Query* / @test public void testgroupby () {client.preparesearch ( "twitter"). settypes ( "tweet") .setQuery (QueryBuilders.MatchAllQuery ()) .SETSERCHTYPE (searchType.query_then_fetch) .AdDaggegration (AgGregationBuilder ( ""). .field ( "사용자"). size (0) // user // size (0)에 따른 그룹 (0)도 10) .get (); }}위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.