Bosh sahifa Wiki Elasticsearch

Elasticsearch

Elasticsearch — documentlarni indekslash, qidirish va aggregation qilishga mo‘ljallangan distributed search hamda analytics tizimi. U text search, log analytics, observability, katalog qidiruvi va boshqa katta hajmli query vazifalarida ishlatiladi.

Elasticsearch ma’lumotni JSONga o‘xshash documentlar ko‘rinishida saqlaydi va inverted index orqali text qidiruvni tezlashtiradi.

Document

Asosiy ma’lumot birligi document.

Document fieldlardan iborat:

{
  "title": "Kubernetes",
  "category": "DevOps",
  "views": 120
}

Har document index ichida noyob identifikatorga ega.

Index

Index o‘xshash documentlar to‘plami.

Masalan:

  • articles;
  • logs;
  • products;
  • events.

Index mapping, settings va shard tuzilishiga ega.

Ko‘p mayda index cluster overheadini oshiradi.

Mapping

Mapping field type va indexing xatti-harakatini belgilaydi.

Field turlari:

  • text;
  • keyword;
  • integer;
  • date;
  • boolean;
  • object;
  • nested;
  • geo;
  • vectorga mos turlar.

Noto‘g‘ri mapping query va storage muammosiga olib keladi.

Text va keyword

text field full-text search uchun analiz qilinadi.

keyword field aniq qiymat, filter, sort va aggregation uchun ishlatiladi.

Masalan, maqola sarlavhasi text, status esa keyword bo‘lishi mumkin.

Bitta field multi-field orqali ikkala ko‘rinishda indekslanishi mumkin.

Analyzer

Analyzer textni tokenlarga aylantiradi.

Bosqichlar:

U lowercase, stop word, stemming, synonym va boshqa qayta ishlashni qo‘llashi mumkin.

Index va search analyzer mos bo‘lishi kerak.

Inverted index

Inverted index har term qaysi documentlarda uchrashini saqlaydi.

Oddiy ko‘rinish:

kubernetes → doc1, doc5
devops → doc1, doc2, doc8

Query barcha documentni to‘liq o‘qimasdan term ro‘yxati orqali natijani topadi.

Query va filter

Query relevance score hisoblaydi.

Filter esa exact shart bilan documentlarni tanlaydi.

Misollar:

  • title’da ma’lum so‘z;
  • status = active;
  • sana oralig‘i;
  • category.

Filter natijalari cache va tez execution uchun qulay bo‘lishi mumkin.

Relevance

Full-text search document qanchalik mos ekanini score bilan baholaydi.

Hisobga olinishi mumkin:

  • term frequency;
  • document frequency;
  • field length;
  • boost;
  • query structure.

Search sifati analyzer, data va user niyatiga bog‘liq.

Aggregation

Aggregation documentlar ustida analytics bajaradi.

Misollar:

  • category bo‘yicha count;
  • kunlik histogram;
  • o‘rtacha narx;
  • percentile;
  • unique user;
  • nested group.

Aggregation katta bucket sonida memory talab qiladi.

Cluster

Elasticsearch cluster bir yoki bir nechta node’dan iborat.

Node’lar:

vazifalarini bajaradi.

Role’lar workloadga qarab ajratilishi mumkin.

Shard

Index bir nechta primary shardga bo‘linadi.

Har shard mustaqil search engine segmentlari to‘plamiga o‘xshaydi.

Shardlar node’lar orasida taqsimlanadi.

Juda ko‘p shard heap va cluster state overheadini oshiradi. Juda katta shard recovery’ni sekinlashtiradi.

Replica

Primary shard nusxasi replica.

Replica:

uchun ishlatiladi.

Replica backup emas, chunki noto‘g‘ri delete va update replica’ga ham ko‘chadi.

Routing

Document ID yoki routing qiymati qaysi shardga tushishini belgilaydi.

Custom routing bir tenant yoki parent-child data’ni bir shardga joylashtirishi mumkin.

Noto‘g‘ri routing hot shard yaratadi.

Refresh

Yangi document search natijasida ko‘rinishi uchun index refresh qilinadi.

Elasticsearch near-real-time search modeliga ega.

Juda tez refresh indexing throughputni pasaytiradi.

Bulk ingestionda interval vaqtincha o‘zgartirilishi mumkin.

Segment

Shard ichida immutable Lucene segmentlari yaratiladi.

Update amalda yangi document yozib, eskisini deleted deb belgilashi mumkin.

Background merge kichik segmentlarni birlashtiradi.

Merge disk I/O va CPU ishlatadi.

Bulk API

Ko‘p documentni alohida request o‘rniga batch bilan yuborish throughputni oshiradi.

Batch juda katta bo‘lsa:

muammosi paydo bo‘ladi.

Response ichida har item xatosi alohida tekshiriladi.

Index lifecycle

Time-based log indexlari:

  • hot;
  • warm;
  • cold;
  • delete

bosqichlari orqali boshqarilishi mumkin.

Rollover hajm, yosh yoki document soniga qarab yangi index yaratadi.

Retention storage xarajati va tahlil talabiga mos belgilanadi.

Snapshot

Snapshot index va cluster ma’lumotini tashqi repositoryga backup qiladi.

Snapshot:

  • incrementga yaqin saqlash;
  • restore;
  • boshqa clusterga ko‘chirish

uchun ishlatiladi.

Replica yoki disk nusxasi snapshotning o‘rnini bosmaydi.

Security

Cluster:

bilan himoyalanadi.

Internetga authentication’siz ochiq cluster katta data yo‘qotish xavfiga ega.

Cluster state

Mapping, index, node va shard metadata cluster state’da saqlanadi. Juda ko‘p index, field va shard state hajmini oshirib boshqaruv operationlarini sekinlashtiradi.

Master-eligible node

Cluster boshqaruv qarorlari uchun master-eligible node’lar consensus qiladi. Majority yo‘qolsa split-brainni oldini olish uchun ayrim write amallari to‘xtaydi.

Allocation

Shardlar disk, awareness, tier va allocation rule asosida node’lar orasida joylashtiriladi. Disk watermark oshsa yangi shard ko‘chishi yoki write block yuz berishi mumkin.

Mapping explosion

Dynamic fieldlar nazoratsiz yaratilsa mapping juda kattalashadi. User-defined keylar alohida nested obyekt yoki flatten qilingan struktura bilan saqlanishi mumkin.

Reindex

Field type yoki analyzer o‘zgarganda mavjud documentlar yangi indexga qayta yoziladi. Alias orqali traffic eski indexdan yangisiga bosqichma-bosqich o‘tkaziladi.

Query cache

Filter va segmentga mos natijalar cache qilinishi mumkin. Tez-tez o‘zgaradigan yoki yuqori cardinality query cache’dan kam foyda oladi.

Bog‘liq tushunchalar

Search engine, Document, Index, Mapping, Analyzer, Inverted index, Query, Aggregation, Shard, Replica, Snapshot, Kibana