구성 준비
build.gradle 파일에 다음 종속성을 추가하십시오.
"org.elasticsearch.client : 5.5.2"컴파일 "org.elasticsearch : elasticsearch : elasticsearch : 5.5.2"// es 5.x의 내부 사용 apache log4 log compile "org.apache.logging.log4j : log4j-core : 2.7"compile "org.apache.logging.log4j : 2.7-api : 2.7" "
여기서 Spring Boot는 버전 1.5.4를 사용합니다. Spring Boot 2의 공식 버전은 며칠 전에 출시되었습니다. Spring Boot 2의 새로운 기능 중 하나는 Kotlin을 지원하는 것입니다. Spring Boot 2는 Spring 5를 기반으로합니다. Spring 5는 Koltin도 지원하므로 Spring도 기능 프로그래밍을 지원하기 시작했습니다.
버전 호환성에 대해
Elasticsearch에 액세스하는 클라이언트를 구성하고 여기에서 기본 ES Javaapi를 사용합니다.
@ConfigurationPublic Class ElasticSearchConfig {@bean (name = "client") 대중 교통 클라이언트 getClient () {inetSocketTransportAddress node = null; try {node = new inetSockettransportAddress (inetAddress.getByName ( "192.168.124.128"), 9300); } catch (unknownHostException e) {e.printstacktrace (); } settings settings = settings.builder (). put ( "cluster.name", "my-es"). build (); TransportClient Client = 새로운 PrebuiltTransportClient (설정); client.addtransportAddress (노드); 반환 클라이언트; }}Sockettransport 포트는 http : // ip : 9200/_nodes를 사용하여 볼 수 있으며 기본값은 포트 9300을 사용하는 것입니다.
CRUD 작동
기본 ES Javaapi를 사용하여 새로운 컨트롤러 인 ElasticsearchController를 만듭니다.
@RestControllerPublic Class ElasticsearchController {@autowired TransportClient Client;}컨트롤러에서 추가, 삭제, 검색 및 수정 방법 추가
작업을 추가하십시오
@postmapping ( "Add/Book/Novel") public responseentity add (@requestparam (name = "title") 문자열 제목, @requestparam (이름 = "Authro") String author, @requestparam (name = "word_count") int WordCount, @requestparam (name = "publish_date") @DateMeformat HH : MM : SS ") DATE PUBLISHDATE) {try {XContentBuilder content = xcontentCoundory.jsonBuilder (). startObject ("title ", title) .field ("저자 ", 저자) .field ("Word_count ", wordCount) .field ("publish_date ", getttime.get (gget.get). indexResponse result = this.client.prepareIndex ( "book", "novel"). setSource (content) .get (); 새로운 응답 센터를 반환합니다 (result.getId (), httpstatus.ok); } catch (ioexception e) {e.printstacktrace (); 새로운 응답 센터를 반환합니다 (httpstatus.internal_server_error); }}작업 삭제
@deletemapping ( "/delete/book/novel") public responseentity delete (@requestparam (name = "id") 문자열 ID) {deleteresponse result = client.preparedElete ( "book", "novel", id) .get (); 새로운 응답 센터를 반환합니다 (result.getResult (). toString (), httpstatus.ok); }검색 작업
@getMapping ( "/get/book/nick") public responseentity get (@requestparam (name = "id", defaultValue = "") String Id) {if (id.isempty ()) {return new resignbentity (httpstatus.not_found); } getResponse result = this.client.prepareget ( "book", "novel", id) .get (); if (! result.isexists ()) {return new responsentity (httpstatus.not_found); } 새 응답 센터를 반환합니다 (result.getSource (), httpstatus.ok); }업데이트 작업
@putmapping ( "/put/book/nick") public responsentity update (@requestparam (name = "id") 문자열 id, @requestparam (name = "thit if (title! = null) {builder.field ( "title", title); } if (author! = null) {builder.field ( "저자", author); } builder.endoBject (); updateRequest updateRequest = 새로운 updateRequest ( "book", "novel", id); updateRequest.doc (builder); updateResponse result = client.update (updateRequest) .get (); 새로운 응답 센터를 반환합니다 (result.getResult (). toString (), httpstatus.ok); } catch (예외 e) {e.printstacktrace (); 새로운 응답 센터를 반환합니다 (httpstatus.internal_server_error); }}복합 검색
@getMapping ( "/query/book/nick") public responsenity query (@requestparam (name = "author", required = false) 문자열 author, @requestparam (name = "title", required = false) 문자열 제목, @requestparam (이름 = "gt_word_count", defaultValue = "0 gtwordcount, @requestparam (reftwordcount) = false) 정수 ltwordcount) {boolqueryBuilder boolqueryBuilder = QueryBuilders.boolquery (); if (author! = null) {boolqueryBuilder.must (QueryBuilders.matchQuery ( "author", author)); } if (title! = null) {boolqueryBuilder.must (QueryBuilders.matchQuery ( "title", title)); } RangeQueryBuilder RangeQueryBuilder = QueryBuilders.RangeQuery ( "Word_Count"). if (ltwordCount! = null && ltwordCount> 0) {RangeQueryBuilder.to (ltwordCount); } boolqueryBuilder.filter (RangeQueryBuilder); SearchRequestBuilder SearchRequestBuilder = this.client.preparesearch ( "Book") .SetTypes ( "Novel") .SearchType (searchType.dfs_Query_Then_Fetch) .setQuery (BOOLQUERYBUILDER) .SETFROM (0) .SETSIZE (10); System.out.println (SearchRequestBuilder); // debug searchResponse responsk = searchRequestBuilder.get (); list <map <string, object >> result = new ArrayList <> (); for (searchHit hit : response.gethits ()) {result.add (hit.getSource ()); } 새로운 응답 센터를 반환합니다 (result, httpstatus.ok); }위의 코드는 다음 쿼리 DSL과 유사한 복합 쿼리를 구성합니다.
{ "query": { "bool": { "must": [{ "match": { "author": "zhang san"}}, { "match": { "title": "elasticsearch"}}], "필터": [{ "range": "range": { "gt"}}}}} }}요약
위의 것은 SpringBoot에 소개 된 편집기가 Elasticsearch를 통합하고 CRUD 작업을 구현하는 것입니다. 모든 사람에게 도움이되기를 바랍니다. 궁금한 점이 있으면 메시지를 남겨 주시면 편집자가 제 시간에 모든 사람에게 답장을 드리겠습니다. Wulin.com 웹 사이트를 지원해 주셔서 대단히 감사합니다!