Экспериментальная среда
Прежде всего, конечно, вам нужно установить среду Elasticsearch. Лучше всего установить визуальный плагин Elasticsearch-Head, чтобы облегчить нам просмотр данных интуитивно.
Конечно, вы можете ссылаться на мой пост в этой части: «Установка упругого поиска и ямы заполнения на CentOS7»
Мой ES установлен по адресу http://113.209.119.170:9200/ (этот адрес должен быть назначен проекту Springboot)
Весеннее проектное создание
Для этой части нет особого объяснения, но есть несколько вещей, которые можно осторожно.
Обратите внимание, что при создании нового проекта не забудьте проверить зависимости Elasticsearch в Интернете и NOSQL, и давайте сделаем снимок, чтобы проиллюстрировать:
При создании проекта проверьте опцию зависимости ES в NOSQL.
После автоматического создания проекта зависимость от Spring-Boot-Starter-Data-Elasticsearch будет автоматически добавлена в pom.xml:
<Depective> <groupid> org.springframework.boot </GroupId> <ArtifactId> Spring-Boot-Starter-Data-ElasticSearch </artifactid> </dependency>
В этом проекте мы используем Jest Client Es Java с открытым исходным кодом, поэтому нам также необходимо добавить шутки в pom.xml:
<Depective> <groupid> io.searchbox </GroupId> <ratifactid> jest </artifactid> </gethyse>
Кроме того, вы должны добавить зависимости JNA:
<depervice> <groupid> net.java.dev.jna </groupid> <ratifactid> jna </artifactid> </deperiance>
В противном случае при запуске Spring Project ошибка JNA не найдена. Нативные методы будут отключены.:
JNA не найден. Нативные методы будут отключены.
Адрес сервера ES должен быть настроен в файле конфигурации проекта.
Сервер: Порт: 6325Spring: Elasticsearch: Jest: URIS: - http://113.209.119.170:9200 # адрес сервера ES! ЧИТАТЬ Timeout: 5000
Кодовая организация
Мой код проекта организован следующим образом:
Организация кода проекта
Каждая часть кода объясняется следующим образом, и комментарии:
Entity.java
Пакет com.hansonwang99.springboot_es_demo.entity; import java.io.serializable; импорт org.springframework.data.elasticsearch.annotations.document; Общественный класс объект реализует сериализируемые {частные статические последние долгосрочные serialversionuid = -763638355551777777666666666666666666666666666666666666666666666666666666 Public Static Final String Index_Name = "index_entity"; Public Static Final String Type = "tStype"; частный длинный идентификатор; Приватное название строки; Public Entity () {super (); } Public Entity (Long Id, String name) {this.id = id; this.name = name; } public long getId () {return id; } public void setId (long id) {this.id = id; } public String getName () {return name; } public void setName (string name) {this.name = name; }} Testservice.java
пакет com.hansonwang99.springboot_es_demo.service; импорт com.hansonwang99.springboot_es_demo.entity.entity; импорт java.util.list; public interface testservice {void saveEntity (объект объекта); void SaveEntity (List <Entity> EntityList); Список <entity> searchentity (String searchContent);}Testserviceimpl.java
пакет com.hansonwang99.springboot_es_demo.service.impl; импорт java.io.ioexception; import java.util.list; импорт com.hansonwang99.springboot_es_demo.entity.entity; импорт com.hansonwang99.springboot_es_demo.service.service.service.service.service.service.service.service.service.service.service.service.service.service.service.service. org.elasticsearch.index.query.querybuilders; import org.elasticsearch.search.builder.searchsourcebuilder; import org.slf4j.logger; import org.slf4j.loggerfactory; импорт org.spramework.beans.annotation org.springframework.stereotype.service; import io.searchbox.client.jestclient; import io.searchbox.client.jestresult; импорт io.searchbox.core.bulk; import io.searchbox.core.index; Import io.searchbox.core.search static final logger logger = loggerFactory.getLogger (testServiceImpl.class); @Autowired Private JestClient JestClient; @Override public void saveEntity (объект объекта) {index index = new Index.Builder (Entity) .Index (entity.index_name) .type (entity.type) .build (); try {jestclient.execute (index); Logger.info ("es вставьте комплекс"); } catch (ioException e) {e.printstackTrace (); Logger.error (e.getMessage ()); }} / ** * Сохранить контент в партиях для es * / @override public void saility (list <entity> entitylist) {bulk.builder bulk = new Bulk.builder (); for (объект объекта: EntityList) {index index = new Index.Builder (Entity) .Index (entity.index_name) .type (entity.type) .build (); насыпный. Addaction (индекс); } try {jestClient.execute (bulk.build ()); Logger.info ("es вставьте комплекс"); } catch (ioException e) {e.printstackTrace (); Logger.error (e.getMessage ()); }} / *** Содержание поиска в ES* / @Override Public List <) SearchStity (String SearchContent) {SearchSourceBuilder SearchSourceBuilder = new SearchSourceBuilder (); //searchsourcebuilder.query(querybuilders.querystringQuery(searchContent)); //searchsourcebuilder.field("name "); SearchSourceBuilder.Query (QueryBuilders.matchQuery ("имя", SearchContent)); Search search = new search.builder (searchsourcebuilder.tostring ()) .addindex (entity.index_name) .adtype (entity.type) .build (); try {jestresult result = jestclient.execute (search); return result.getSourCeasObjectList (entity.class); } catch (ioException e) {logger.error (e.getMessage ()); e.printstacktrace (); } return null; }} EntityController.java
пакет com.hansonwang99.springboot_es_demo.controller; import java.util.arraylist; import java.util.list; импорт com.hansonwang99.springboot_es_demo.entity.entity; импорт com.hansonwang99.springboot_es_demo.entity.service. org.apache.commons.lang.stringutils; import org.springframework.beans.factory.annotation.autowired; import org.springframework.web.bindation.Requestmapping; импорт org.springframework.web.bindtation.requestmathd; org.springframework.web.bind.annotation.restcontroller;@restcontroller@requestmapping ("/entitycontroller") открытый класс EntityController {@Autowired TestService CitySesservice; @Requestmapping (value = "/save", method = requestMethod.get) public String save (long id, string name) {system.out.println ("Сохранить интерфейс"); if (id> 0 && stringutils.isnotempty (name)) {entity newentity = new Entity (id, name); Список <entity> addlist = new ArrayList <entity> (); addlist.add (новая); CitySesservice.saveEnity (Addlist); вернуть "OK"; } else {return "Плохое входное значение"; }} @Requestmapping (value = "/search", method = requestMethod.get) public list <entity> save (string name) {list <entity> entitylist = null; if (stringutils.isnotempty (name)) {entitylist = citySesservice.searchentity (name); } return EntityList; }}Фактические эксперименты
Чтобы добавить несколько деталей данных, вы можете использовать инструмент Postman или вы можете ввести его непосредственно в браузер, например, добавление следующих 5 элементов данных:
http: // localhost: 6325/entitycontroller/save? id = 1 & name = nanjing sun yat-sen mausoleum http: // localhost: 6325/entitycontroller/save? id = 2 & name = nanjing normation in http: // localhost: 6325/entityconconcost? Храм конфуция http: // localhost: 6325/entitycontroller/save? Id = 4 & name = hangzhou также очень хорошо http: // localhost: 6325/entitycontroller/save? Id = 5 & name = Там, кажется, нет города, называемого Цзин, на юге Китая.
Эффект введения данных заключается в следующем (с помощью визуального плагина Elasticsearch-Head):
Эффект введения данных
Давайте сделаем поисковый тест: Например, я хочу найти ключевое слово "Nanjing"
Мы набираем браузер:
http: // localhost: 6325/entitycontroller/search? name = nanjing
Результаты поиска следующие:
Результаты поиска для ключевого слова "Nanjing"
Все четыре записи с ключевым словом «Nanjing», вставленные только сейчас, были найдены!
Конечно, здесь используется стандартный метод сегментации слов, и каждый китайский используется в качестве термина. Все записи, содержащие ключевое слово «юг» и «Пекин», были поиск, но оценки разные. Конечно, есть другие методы сегментации слов. В настоящее время требуется поддержка других плагинов сегментации слов. Это не покрыто здесь, и я буду исследовать это позже.
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.