тут создается кластер, у которого ноды es02 и es03 не знают ничего изначально друг о друге, а знают только про es01.
после запуска отключаем es01 и наблюдаем, что es02 и es03 уже знают друг о друге и берут на себя роли исчезнувшей ноды
делаем нодам ограничение по ролям. es01 может быть только мастером, es02 и es03 - только избирателями и хранилками. ПРИМ: чтобы быть избирателем, ноде всё равно нужно указать роль master
Первый тест по созданию и удалению индекса (com.vinsguru.playground.sec01.IndexOperationsTest.createIndex).
Тесты можно запускать так:
./gradlew clean test --tests com.vinsguru.playground.sec01.IndexOperationsTest.createIndex
Создание индексов с использованием конфигурационных файлов и аннотаций
Работа с документами с использованием org.springframework.data.elasticsearch.repository.ElasticsearchRepositoryorg.springframework.data.elasticsearch.repository.ElasticsearchRepository
Массовая вставка/обновление/удаление с использованием org.springframework.data.elasticsearch.repository.ElasticsearchRepositoryorg.springframework.data.elasticsearch.repository.ElasticsearchRepository
Исследование query methods, т.е. методов в репозитории, на основании имен которых динамически создаются запросы. Типа findAllByNameAndAge
.
Добавлены утилитные методы в com.vinsguru.playground.AbstractTest
Включено логирование запросов, геренируемых Спрингом для ElasticSearch
Изменена область тестов: PER_METHOD -> PER_CLASS
Исследование query methods, продолжение
Исследование query methods, продолжение. Сортировка и between.
Pagination
Query annotation. Можно использовать кастомные запросы, которые можно тонко настраивать - включать fuzziness, slop, tie-breaker...
Highlighting. если его запросить, то будет заполнено поле highlightFields в возвращаемых объектах org.springframework.data.elasticsearch.core.SearchHits
Setup для дальнейших лекций
Criteria query
Используется для динамического построения запросов, когда не хватает возможностей @org.springframework.data.elasticsearch.annotations.Query
Fuzzy search, комбинирование по And и Or, поле больше или меньше, boost rating...
Native bool query. Позволяет создавать запросы любой сложности с помощью Builder API.
aggregation
Как отличать различные типы аггрегаций
Autocomplete suggestion
Чтобы наполнить данными базу данных, надо:
- зайти в ./final-project/docker
- запустить
docker compose up
(илиmake up
) - дождаться полного старта контейнера elasticsearch
- запустить
docker compose run --rm data-setup
(илиmake data-setup
)
Запуск: ./gradlew bootRun
. потом использовать curl для запросов к API, или открыть в браузере http://localhost:8080
# "Хорошие" запросы
curl 'http://localhost:8080/api/suggestions?prefix=auto&limit=5' | jq
curl 'http://localhost:8080/api/search?query=auto%20dealer' | jq | less
curl 'http://localhost:8080/api/search?query=restaurants' | jq | less
curl 'http://localhost:8080/api/search?query=chinese%20restaurants' | jq | less
curl 'http://localhost:8080/api/search?query=walmart' | jq | less
curl 'http://localhost:8080/api/search?query=walmart&state=Georgia' | jq | less
# "Плохие" запросы
curl 'http://localhost:8080/api/suggestions?prefix=&limit=5' | jq
curl 'http://localhost:8080/api/search' | jq
Создан шаблон финального проекта (./final-project). Чтобы наполнить данными базу данных, надо:
- зайти в ./final-project/docker
- запустить
docker compose up
(илиmake up
) - дождаться полного старта контейнера elasticsearch
- запустить
docker compose run --rm data-setup
(илиmake data-setup
)
Написание методов-помощников для поисковых предложений
Продолжается написание кода для поисковых предложений
Валидация, обработка ошибок для поисковых предложений
Написание базового кода для API поиска
Утилитные методы для построения поисковых запросов
пишем инфраструктурный код для построения запросов
Снова пишем инфраструктурный код для построения запросов
Созданы необходимые DTO
создан com.vinsguru.business.service.SearchService
, написаны методы поиска
полностью реализован API для поиска
интеграционные тесты для автодополнения
интеграционные тесты для поиска Исправление ошибок
Добавлен фронтенд - index.html [f] в результатах не было наименования организации
Будем ковыряться с самоподписанным сертификатом для elasticsearch.
забрать самоподписанный сертификат из контейнера:
docker cp elastic:/usr/share/elasticsearch/config/certs/http_ca.crt .
после этого можно работать через https:
curl --cacert http_ca.crt https://localhost:9200 -u elastic:password123
# или
curl --cacert certs/trust-store.crt https://localhost:9200 -u elastic:password123
Добавлена конфигурация docker compose для запуска elasticsearch с поддержкой https.
Используем формат jks для хранилища сертификатов. однако curl не понимает jks, поэтому надо экспортировать сертификат из jks в формат crt. А java-клиенты могут задействовать certs/elastic.truststore.jks