Подготовка конфигурации
Добавьте следующие зависимости в файл build.gradle:
Compile "org.elasticsearch.client: Транспорт: 5.5.2" Компиля "org.elasticsearch: Elasticsearch: 5.5.2" // ES 5.x Внутреннее использование Apache Log4 Compile "org.apache.logging.log4j: log4j-core: 2.7" compile "org.apache.logging.log4j: log4j-api: 2.7" compile "org.apache.logging.log4j: log4j-api: 2.7".
Здесь Spring Boot использует версию 1.5.4. Официальная версия Spring Boot 2 была выпущена несколько дней назад. Одной из новых функций Spring Boot 2 является поддержка Kotlin. Spring Boot 2 основан на пружине 5. Spring 5 также поддерживает Koltin, поэтому Spring также начала поддерживать функциональное программирование.
О совместимости версий
Настройте клиента, который обращается к Elasticsearch, и все используйте собственную Es Javaapi здесь.
@ConfigurationPublic Class ElasticSearchConfig {@Bean (name = "client") public TransportClient getClient () {inetSocketTransportAddress node = null; try {node = new inetsockettransportaddress (inetaddress.getbyname ("192.168.124.128"), 9300); } catch (Unknownhostexception e) {e.printstackTrace (); } Настроек настройки = настройки.builder (). Put ("cluster.name", "my-es"). Build (); TransportClient Client = новый PrebuiltTransportClient (настройки); client.addtransportAddress (узел); вернуть клиент; }}Порт SocketTransport можно просмотреть с помощью http: // ip: 9200/_nodes, а по умолчанию используется порт 9300.
Операция CRUD
Создайте новый контроллер, ElasticsearchController, используя Native Es Javaapi.
@RestControllerPublic Class ElasticSearchController {@Autowired TransportClient Client;}Добавление методов для добавления, удаления, поиска и изменения в контроллере
Добавить операции
@Postmapping ("Добавить/book/nome") public responseent add (@requestparam (name = "title") название строки, @requestparam (name = "authro") строки автор, @requestparam (name = "word_count") int wordcount, @requestparam (name = "publish_date") @DateTimeFormat (patterncount = "hylyy-mm-mm-mm-mm-mm-mm-mm-mm-yyyy HH: MM: SS ") Date PublishDate) {try {xContentBuilder Content = xContentFactory.jsonBuilder (). StartObject () .Field (" title ", title) .field (" Автор ", Автор) .Field (" word_Count ", WordCount) .field (" publish_date ", publishdate. Indexresponse result = this.client.prepareindex («book», «new»). SetSource (content) .get (); вернуть новый ответ (result.getid (), httpstatus.ok); } catch (ioException e) {e.printstackTrace (); вернуть новый ответ (httpstatus.internal_server_error); }}Удалить операцию
@Deletemapping ("/delete/book/nome") public responseent delete (@requestparam (name = "id") String Id) {deleterSponse result = client.prepareDelete ("book", "nove", id) .get (); вернуть новую реакцию (result.getResult (). ToString (), httpstatus.ok); }Поисковые операции
@Getmapping ("/get/book/nome") public responseent get (@requestparam (name = "id", defaultvalue = "") string id) {if (id.isempty ()) {return new responseentity (httpstatus.not_found); } GetResponse result = this.client.prepareget ("book", "noval", id) .get (); if (! result.isexists ()) {вернуть новую ответ (httpstatus.not_found); } вернуть новую реакцию (result.getSource (), httpstatus.ok); }Операция обновления
Public Recpactent Enspublic (@RequestParam ("/put/book/nement") (@RequestParam (name = "ID"), @RequestParam (name = "title", обязательный = false) название строки, @RequestParam (name = "Автор", обязательный = false) string author) {try {xcontentBuilder builder = xcontentFactory.json (); if (title! = null) {builder.field ("title", title); } if (Автор! = null) {builder.field ("Автор", автор); } builder.endobject (); UpdateRequest updateRequest = new UpdateRequest («Book», «Роман», ID); UpdateRequest.doc (Builder); UpdateResponse result = client.update (updateRequest) .get (); вернуть новую реакцию (result.getResult (). ToString (), httpstatus.ok); } catch (Exception e) {e.printstackTrace (); вернуть новый ответ (httpstatus.internal_server_error); }}Составной поиск
@Getmapping ("/Query/book/nome") public responseent Query (@RequestParam (name = "Author", обязательный = false) Автор строки, @Requestparam (name = "title", обязательный = false) заголовок строки, @RequestParam (name = "gt_word_count", defaultValue = "0") int gt gtwordCount, @RequestParam (kame_count. = false) integer ltwordCount) {boolqueryBuilder boolqueryBuilder = QueryBuilders.boolquery (); if (автор! = null) {boolquerybuilder.must (QueryBuilders.matchquery ("Автор", автор)); } if (title! = null) {boolquerybuilder.must (QueryBuilders.matchquery ("title", title)); } RangeQueryBuilder rangeQueryBuilder = QueryBuilders.RangeQuery ("word_Count"). От (gtwordCount); if (ltwordcount! = null && ltwordcount> 0) {rangeQueryBuilder.to (ltWordCount); } boolquerybuilder.filter (rangeQueryBuilder); SearchRequestBuilder SearchRequestBuilder = this.Client.Preparesearch ("book") .setTypes ("noval") .setSearchType (searchtype.dfs_query_then_fetch) .setquery (boolquerybuilder) .setfrom (0) .setize (10); System.out.println (SearchRequestBuilder); // отладка searchresponse response = searchRequestbuilder.get (); Список <map <string, object >> result = new ArrayList <> (); для (searchhit Hit: response.gethits ()) {result.add (hit.getSource ()); } вернуть новую реакцию (результат, httpstatus.ok); }Приведенный выше код организует составные запросы, аналогичные следующему запросу DSL:
{"Query": {"bool": {"upt": [{"match": {"Автор": "Zhang San"}}, {"match": {"title": "elasticsearch"}}], "Фильтр": [{"range": {"word_count": {"gt": ",", ")") ")") }}Суммировать
Вышеуказанное - то, что редактор представил Springboot интегрировать Elasticsearch и реализует операции CRUD. Я надеюсь, что это будет полезно для всех. Если у вас есть какие -либо вопросы, пожалуйста, оставьте мне сообщение, и редактор ответит всем вовремя. Большое спасибо за вашу поддержку сайту wulin.com!