Bosh sahifa Wiki Search engine

Search engine

Search engine — katta hujjatlar yoki yozuvlar to‘plamidan foydalanuvchi so‘roviga mos natijalarni topib, tartiblashga xizmat qiladigan axborot qidiruv tizimidir. U ma’lumotni oldindan indekslaydi, so‘rovni tahlil qiladi, mos hujjatlarni tanlaydi va relevance bahosi asosida qaytaradi.

Indekslash oqimi

Hujjat avval parser va analyzer orqali o‘tadi. Matn tokenlarga ajratiladi, harf registri normallashtirilishi, stop-wordlar chiqarilishi yoki stemming qo‘llanishi mumkin. Natijada inverted index yaratiladi: har termin qaysi hujjatlarda va qaysi pozitsiyalarda uchrashi qayd etiladi.

Hujjatlar → parsing → analysis → inverted index → qidiruv

Structured fieldlar matndan boshqacha indekslanadi. Sana range query, raqam sorting va aggregation, keyword esa aniq tenglik uchun mos. Field type noto‘g‘ri tanlansa keyin mapping migration yoki reindex talab qilinadi.

So‘rovni bajarish

Query parser foydalanuvchi matnini operator, field va filterlarga ajratadi. Full-text clause relevance score hisoblaydi, filter esa hujjatni mos yoki mos emas deb belgilaydi. Filter natijasi ko‘pincha cache qilinadi va scoringga ta’sir qilmaydi.

Term frequency, inverse document frequency va document lengthni hisobga oluvchi BM25 keng tarqalgan ranking modelidir. Phrase query tokenlarning tartibi va masofasini ham tekshiradi. Fuzzy qidiruv imlo xatosiga chidamli, ammo juda katta edit distance keraksiz nomzodlar va CPU xarajatini oshiradi.

Shard va replica

Katta indeks bir nechta shardga bo‘linadi. Coordinator so‘rovni tegishli shardlarga yuboradi, har shard mahalliy top natijalarni qaytaradi, so‘ng ular global tartibda birlashtiriladi. Replica o‘qish yukini taqsimlaydi va primary yo‘qolganda availabilityni oshiradi.

Shardlar soni fizik masshtabni belgilaydi, lekin ko‘p mayda shard metadata va heap xarajatini ko‘paytiradi. Juda katta shard recovery va relocationni sekinlashtiradi. Routing key ma’lum tenant yoki obyekt yozuvlarini bir shardga yo‘naltirishi mumkin, biroq notekis key hot shard yaratadi.

Yangilanish va consistency

Ko‘p search enginelar near-real-time ishlaydi. Yozuv qabul qilingach darhol qidiruvda ko‘rinmasligi mumkin; refresh yangi segmentni ochadi. Transactional database va search index orasida dual-write bajarilsa bittasi muvaffaqiyatsiz bo‘lishi mumkin. Change data capture yoki outbox oqimi reindex va retryni boshqaradi.

Update ko‘pincha ichki hujjatni o‘zgartirish emas, eski versiyani o‘chirilgan deb belgilab yangi versiya yozish orqali bajariladi. Segment merge diskdagi mayda segmentlarni birlashtirib, o‘chirilgan yozuv joyini bo‘shatadi. Merge katta I/O sarflashi sabab ingest va query latencyga ta’sir qiladi.

Sifat va xavfsizlik

Qidiruv sifati precision, recall, click feedback va belgilangan relevance dataset bilan o‘lchanadi. Faqat click soni rankingning to‘g‘riligini isbotlamaydi, chunki yuqori natija ko‘proq ko‘rinadi. Analyzer, synonym va boost o‘zgarishlari offline hamda nazoratli online sinovdan o‘tadi.

Access control querydan oldin yoki uning ichida majburiy filter bilan qo‘llanadi. Natijani UI darajasida yashirish yetarli emas; aggregation, suggest va cache ham ruxsatsiz hujjat mavjudligini oshkor qilmasligi kerak. Query hajmi, wildcard va aggregation cardinality cheklanib, resursni tugatish hujumlari kamaytiriladi.

Suggest va pagination

Autocomplete to‘liq qidiruvdan boshqa indeks yoki prefix strukturasidan foydalanishi mumkin. U juda qisqa inputda ulkan candidate to‘plamini yaratmasligi va ruxsatsiz nomlarni taklif qilmasligi kerak. Chuqur pagination barcha shardlardan ko‘p natijani yig‘ishga majbur qiladi. Barqaror sort va search_after cursor oldingi sahifaning oxirgi qiymatidan davom etib, katta offset xarajatini kamaytiradi. Indeks o‘zgarayotgan paytda qat’iy snapshot kerak bo‘lsa point-in-time konteksti ishlatiladi.

Bog‘liq tushunchalar

Inverted index, Full-text search, BM25, Analyzer, Shard, Replica, Relevance ranking