Elasticsearch – bu tarqatilgan, izlash va analitik RESTful dvijok ochiq kodli. Spring Boot Elasticsearch mijozlari uchun asosiy avtomatik konfiguratsiyani taqdim etadi.
Spring Boot bir nechta mijozlarni qo'llab-quvvatlaydi:
-
Rasmiy past darajali Java mijozlari va yuqori darajali REST mijozlari
-
ReactiveElasticsearchClient, Spring Data Elasticsearch tomonidan taqdim etilgan
Spring Boot spring-boot-starter-data-elasticsearch nomli maxsus "starter" taqdim etadi.
REST mijozlari orqali Elasticsearch bilan bog'lanish
Elasticsearch ikki xil REST mijozlarni taqdim etadi, klasterga so'rovlar yuborish uchun foydalanishingiz mumkin: org.elasticsearch.client:elasticsearch-rest-client modulidan past darajali mijoz va org.elasticsearch.client:elasticsearch-high-level-client modulidan yuqori darajali mijoz. Bundan tashqari, Spring Boot Spring Framework dan WebClient asoslangan reaktiv mijozni qo'llab-quvvatlaydi, bu org.springframework.data:spring-data-elasticsearch modulidan olingan. Mijozlar odatda localhost:9200ga mo'ljallangan bo'ladi. Mijozlarni konfiguratsiyalash uchun spring.elasticsearch.* xususiyatlarini qo'shimcha qilib ko'rsatishingiz mumkin, quyidagi misolga qarang:
spring.elasticsearch.uris=https://search.example.com:9200
spring.elasticsearch.socket-timeout=10s
spring.elasticsearch.username=user
spring.elasticsearch.password=secret
spring:
elasticsearch:
uris: "https://search.example.com:9200"
socket-timeout: "10s"
username: "user"
password: "secret"
RestClient orqali Elasticsearch bilan bog'lanish
Agar classpath-da elasticsearch-rest-client mavjud bo'lsa, Spring Boot avtomatik ravishda RestClient binini konfiguratsiyalaydi va registrasiyalaydi. Agar classpath-da elasticsearch-rest-high-level-client mavjud bo'lsa, RestHighLevelClient bini ham avtomatik ravishda konfiguratsiyalanadi. Elasticsearch tomonidan RestHighLevelClient tavsiya qilinmaganligi va keyingi chiqarishda bu avtomatik konfiguratsiya olib tashlanadi. Oldin ko'rsatilgan xususiyatlardan tashqari, RestClient va RestHighLevelClientni konfigurlash uchun RestClientBuilderCustomizer ni amalga oshiradigan bundaylarning ixtiyoriy sonini registratsiyalashingiz mumkin. Mijozlar konfiguratsiyasi ustidan to'liq nazorat uchun RestClientBuilder binini aniqlang.
Bundan tashqari, agar elasticsearch-rest-client-sniffer classpath-da mavjud bo'lsa, Sniffer avtomatik tarzda konfiguratsiyalanadi va Elasticsearch klasteridagi tugunlarni avtomatik aniqlashni amalga oshirib, ularni RestClient biniga o'rnatadi. Sniffer konfiguratsiyasini qo'shimcha ravishda ko'rsatishingiz mumkin, quyida ko'rsatilgan:
spring.elasticsearch.restclient.sniffer.interval=10m
spring.elasticsearch.restclient.sniffer.delay-after-failure=30s
spring:
elasticsearch:
restclient:
sniffer:
interval: "10m"
delay-after-failure: "30s"
ReactiveElasticsearchClient orqali Elasticsearch bilan bog'lanish
Spring Data Elasticsearch WebClient asosida reaktiv usulda Elasticsearch instansiyalariga so'rovlar yuborish uchun ReactiveElasticsearchClient taqdim etadi. WebFlux’dan WebClient ni qo'llab-quvvatlash vositalarini faollashtirish uchun spring-boot-starter-elasticsearch va spring-boot-starter-webflux chegaralari foydali bo'ladi.
Standart bo'yicha Spring Boot ReactiveElasticsearchClient ni avtomatik ravishda konfiguratsiyalaydi va registratsiyalaydi. Shu bilan birga, oldin ko'rsatilgan xususiyatlarga qo'shimcha qilib, reaktiv dasturlash uchun spring.elasticsearch.webclient.* xususiyatlaridan foydalanishingiz mumkin, quyidagi misolga qarang:
spring.elasticsearch.webclient.max-in-memory-size=1MB
spring:
elasticsearch:
webclient:
max-in-memory-size: "1MB"
Agar spring.elasticsearch. va spring.elasticsearch.webclient. konfiguratsion xususiyatlari yetarli bo'lmasa va siz mijoz konfiguratsiyasini to'liq boshqarishni xohlasangiz, ClientConfiguration ni o'z binlaringizga qo'shishingiz mumkin.
Spring Data orqali Elasticsearch bilan bog'lanish
Elasticsearch'ga ulanish uchun RestHighLevelClient bini aniqlangan bo'lishi kerak, bu Spring Boot tomonidan avtomatik ravishda konfiguratsiyalanadi yoki qo'lda ilova orqali taqdim etiladi (oldingi bo'limlarga qarang). Shu konfiguratsiyaga ega bo'lgan holda ElasticsearchRestTemplate ni Spring'dagi boshqa binlar kabi injekte qilish mumkin, quyidagi misolga qarang:
@Component public class MyBean { private final ElasticsearchRestTemplate template; public MyBean(ElasticsearchRestTemplate template) { this.template = template; } }
@Component class MyBean(private val template: ElasticsearchRestTemplate) { }
WebClient-dan foydalanish uchun zarur bo'lgan spring-data-elasticsearch va kutubxonalar mavjud bo'lsa, Spring Boot ham ReactiveElasticsearchClient va ReactiveElasticsearchTemplate ni avtomatik ravishda konfigurlanadi va bin sifatida registratsiyalaydi. Ular boshqa REST mijozlarning reaktiv ekvivalentidir.
Spring Data Elasticsearch Repositoriyalari
Spring Data Elasticsearch uchun repozitoriyalar qo'llab-quvvatlash vositalariga ega. Avvalgi maqolada ko'rib chiqilgan JPA repozitoriyalariga o'xshash, asosiy printsip shundan iboratki, so'rovlar avtomatik ravishda metod nomlari asosida quriladi.
Amalda, Spring Data JPA va Spring Data Elasticsearch bir xil umumiy infratuzilmaga ega. JPA uchun avvalgi maqoladagi misollarni olib, agar City endi Elasticsearch classi @Document annotatsiyasiga ega bo'lsa va JPA obekti @Entity annotatsiyasiga ega bo'lmasa, u xuddi shunday ishlaydi.
Spring Boot ElasticsearchRestTemplate yoki ReactiveElasticsearchTemplate orqali klassik va reaktiv Elasticsearch repozitoriyalarini qo'llab-quvvatlaydi. Zarur kutubxonalar mavjud bo'lsa, bu binlar Spring Boot tomonidan avtomatik ravishda konfiguratsiyalanadi.
Agar siz o'zingizning shabloningizni ishlatishni xohlasangiz, Elasticsearch repozitoriyalarini qo'llab-quvvatlash uchun qo'shimcha ElasticsearchRestTemplate yoki ElasticsearchOperations ni bin sifatida qo'shishingiz va ularni @Bean annotatsiyasi bilan belgilashingiz mumkin, agar ularning nomi "elasticsearchTemplate" bo'lsa. ReactiveElasticsearchTemplate va ReactiveElasticsearchOperations uchun esa, bin nomi "reactiveElasticsearchTemplate" bo'lishi kerak.
Quyidagi xususiyat orqali repozitoriyalarni qo'llab-quvvatlashni o'chirib qo'yishingiz mumkin:
spring.data.elasticsearch.repositories.enabled=false
spring:
data:
elasticsearch:
repositories:
enabled: false
GO TO FULL VERSION