Filtrasiya və tam mətnli axtarış
1) Niyə axtarış təbəqəsi lazımdır
Filtrasiya və tam mətnli axtarış (FTS) məlumatlara yalnız əsas açarlarla deyil, «məna baxımından» sürətli çıxışı təmin edir. Düzgün dizayn edilmiş axtarış təbəqəsi birləşdirir:- Ciddi filtrlər (kateqoriyalar, tarixlər, qiymətlər, giriş hüquqları)
- Tam mətn (leksik matç və sıralama)
- Fasetlər (naviqasiya üçün aqreqatlar)
- Hibrid sıralama (BM25/TF-IDF + vektor embeddingi)
- Etibarlı protokollar (kursorlarla paginasiya, TTL tokenləri, cross-charding)
2) Memarlıq rəsm
Komponentlər:1. Ingest/ETL → normallaşma, deduplikasiya, zənginləşdirmə, indeks üçün sahələrin qurulması.
2. Indeksator → tərs indeks (leksemlər → sənədlər), sütun strukturları, vektor indeksi (HNSW/IVF-PQ).
3. Query Layer → istək parser, filtrlərin tətbiqi/giriş hüquqları, şard planlaşdırıcısı, k-way merge.
4. Ranker → BM25 + (ops.) LTR/Neural re-rank.
5. Serving → Cache, kursorlar, fasetlər, highlightlar, avtomobil sobaları.
6. Müşahidə → gecikmə metrikası, keyfiyyət, A/B təcrübələri.
3) Data və indeks modeli
3. 1 Sahələr və analizatorlar
Növləri: keyword (düz uyğunluq), text (təhlil), numeric/date/geo, vector.
Analizatorlar: tokenizasiya, normallaşdırma (lowercase, Unicode NFKC), filtrlər (stemminq/lemmatizasiya).
Çoxdilli: per-field analizatorları (ru, uk, en); ICU analizi; transliterasiya; diakritik hesabatı.
3. 2 Əks indeks (sparse)
Strukturu: term → posting list (docID, term freq, mövqelər).
Sıralama: BM25 (və ya klassik TF-IDF) sahə bustları ilə.
3. 3 Vektor indeksi (dense)
Mətn embeddingi (məsələn, 384-1024-ölçülü).
ANN strukturları: HNSW, IVF-PQ, Flat (kiçik dəstlər üçün).
Kosinus yaxınlığı/inner product; BM25 (hibrid) ilə kalibrləmə.
3. 4 Faset və aqreqatlar
sürətli count üçün precompute/sütun saxlama dəyərləri.
İyerarxik fasetlər (kateqoriya/alt kateqoriya).
Diapazonlar (qiymətlər, tarixlər).
4) Sorğular: filtrlər + tam mətn + çeşidləmə
4. 1 API müqavilələri (REST)
Sorğu:
GET /v1/search? q = classic slots & limit = 20 & cursor =... & sort = score: desc, created _ at: desc
&filters=brand:("NetEnt","EGT"); price:[10 TO 50];published_at:[2024-01-01 TO ]
&facets=brand,year,price:range(0,10,20,50,100)
Cavab (fraqment):
json
{
"items": [ { "id":"...", "title":"...", "score": 12. 3, "highlight": { "content": ["..."] } } ],
"facets": { "brand": [{"value":"NetEnt","count":123},...] },
"page": { "limit":20, "has_more":true, "next_cursor":"opaque-token" }
}
4. 2 GraphQL (sadələşdirilmiş)
graphql type Query {
search(query: String!, filter: SearchFilter, first: Int, after: String, sort: [Sort!]): SearchConnection!
}
4. 3 gRPC
proto message SearchRequest {
string query = 1;
map<string,string> filters = 2;
int32 page_size = 3;
string page_token = 4; // курсор repeated string facets = 5;
}
5) Təbii dil emalı (NLP)
Tokenizasiya/normallaşdırma: Unicode-təhlükəsiz, defis/apostrofların uçotu.
Stop-sözlər: dillərə görə tənzimləmə siyahıları.
Stemming vs lemmatization: ru/uk üçün daha yaxşı lemmatization (keyfiyyət> sürət).
Sinonimlər: iki yönlü/yönlü lüğətlər; TTL ilə lüğət versiyaları.
Çap səhvləri (fuzzy): Damerau-Levenshtein məsafə məhdudiyyəti və dəqiq uyğunluq bustları ilə.
N-qram/edge-ngrams: avtomatik kompüter və ipuçları üçün.
Transliterasiya: «shch», «kiev/kyiv» - uyğunluq qaydaları.
6) Müvafiq və sıralama
6. 1 Əsas leksik skorinq
BM25 'k1', 'b' konfiqurasiya edir.
Sahələrdə bustlar (title ^ 3, tags ^ 1. 5, body^1).
Təravət: 'score + = freshness_boost (decay (created_at))'.
6. 2 Davranış siqnalları
Click-through rate, dwell time, favorite saxlamaq (anti-position bayas ilə).
Deduplikasiya: ~ eyni məzmunlu sənədlərin yapışdırılması (MinHash/SimHash).
6. 3 Learning-to-Rank (LTR)
Fiçlər: BM25, uzunluq, təravət, populyarlıq, ifadənin üst-üstə düşməsi, mövqe sürəti.
Modellər: LambdaMART/XGBoost; NDCG @k, MAP, Precision @k oflayn metrlər; online A/B
6. 4 Neyro yenidən qurulması
İki mərhələ: recall (BM25/ANN) → top-N (məsələn, 200) → cross-encoder rerank.
Xərc uçotu: zaman-büdcə, yükləmə zamanı neyro-mərhələsiz fallback.
6. 5 Hibrid axtarış (sparse + dense)
Ya fusion (sürtünmələrin normallaşması və cəmi), ya da multi-stage (rerank kimi dense).
Kalibrləmə vacibdir: min-max/z-score/quantile mapping.
7) Filtrasiya, fasetlər və giriş
7. 1 Filtrlər
Operatorlar: '=', 'IN', diapazonlar, prefikslər, geo-bounding box/geo-distance.
Kombinasiyalar: 'AND' filterlər üzrə, 'OR' bir çox qiymətlər daxilində (brand IN...).
Tipik təhlükəsizlik: say sahələri mətn kimi təhlil edilmir.
7. 2 Fasetlər
Əvvəlcədən hesablanmış strukturlar üzrə ucuz count-lar.
«Tətbiq olunan» fasetlər qalan variantları göstərir (post-filter faceting).
7. 3 Giriş/multi-tenant
Təhlükəsizlik filtrləri sıralamadan əvvəl inteqrasiya olunur (pre-filter).
Sənəddə ABAC/RBAC sahələri ('tenant _ id', 'visibility', 'acl').
Sorğu tokeni imzalanmışdır; multi-tenant - avtomatik 'tenant _ id' filter.
8) Paginasiya, kursorlar və sabitlik
Seek-kursor tərəfindən '(score, tie-breaker)' və ya '(created_at, id)' ilə paginasiya.
Qeyri-şəffaf 'page _ token' c HMAC və TTL.
Tutarlılıq: near-real-time (NRT) indeksi: gecikmə 0. 5-2 qeyd və görünürlük arasında. Bunu SLA-da sənədləşdirin.
Cross-shard: qlobal qaydada lokal axtarış → k-way merge, tokenda per-shard kursorları.
9) Avtomatik tamamlama və ipuçları
Suggesters: prefix-trie / edge-ngrams по полю `title`.
Popular queries: log klikləri → populyarlıq ipuçları + personalizasiya (seqmentlər).
Spell-as-you-type: məsafə məhdudiyyəti ilə sürətli fuzzy-axtarış '<= 1'.
GET /v1/suggest? q=kaz&limit=8&locale=ru
→ ["casino," "casual games,..."]
10) Highlights və snippets
Mövqe indeksi → uyğunluqlarla ifadələrin çıxarılması.
HTML ekranlaşdırılması, uzunluq limiti, qonşu fraqmentlərin birləşməsi.
Müvafiq terminlərin sıxlığına görə snippetlərin sıralanması.
11) Performance, cache və SLO
Indekslər: yaddaşda isti seqmentlər; kompression postings; doc values faset üçün.
Cache: L1 (proses), L2 (Redis), faset/aqreqat cache; indeks versiyasına görə əlil.
SLO: P95 <150-200 ms 'k <= 20', P99 <500 ms; mövcudluğu 99. 9%.
Backpressure: 'k' azaldılması, həddindən artıq yüklənmə zamanı neyro-mərhələnin dayandırılması.
API/istifadəçi/tenant açarına rate limiting.
12) Müşahidə və keyfiyyət metrikası
Texnometrika:- `search_latency_ms` (P50/P95/P99), `qps`, `timeouts`, `error_rate`
- `cache_hit_ratio`, `facet_cache_hit`, `rerank_share`
- `shard_fanout`, `merge_time_ms`, `ann_recall@k`
- NDCG @k, MAP, MRR, Recall @k, Precision @k müəyyən nümunələrdə.
- CTR@k, sCTR (satisfied clicks), dwell time, отказ (pogostick rate).
A/B: «guardrail» metrikasını (gecikmə, səhvlər) + hədəf (NDCG proxy) qeyd edin.
13) Test
Relevance unit tests: əsas sorğular üzrə gözlənilən matçların yoxlanılması.
Property-based: səhv yazılara/sinonimlərə/dillərə qarşı müqavimət.
Pagination: səhifələr sərhədində dublikatların olmaması (seek-müqavilələr).
Təhlükəsizlik: Giriş filtrləri həmişə tətbiq olunur (hətta faset-count).
Sözlüklərin reqressiyası: sinonimlərin və fuzzy-qaydaların versiyalaşdırılması.
14) Təhlükəsizlik və məxfilik
PII olan sahələr text kimi indeksləşdirilmir; ayrı saxlamaq/şifrələmək.
Saxlanan orijinal mətnləri minimuma endirin (store = false, yalnız snippet sahələri).
Query privacy: PII ilə xam sorğuları loqo deyil; anonimləşdirmə/hash.
Multi-tenant: ciddi izolyasiya indeksləri və ya məcburi 'tenant _ id' filter.
15) Miqrasiya və uyğunluq
İkiqat qeyd və tədricən keçid ilə indeks sxemi (v1 → v2) versiyası.
Analizatorların uyğunluğu: köhnə zəncirləri yenidən indeksləşdirənə qədər saxlayın.
Sinonim lüğətlərin/sözlərin rotasiyası: 'version', 'activated _ at', rollback.
16) Praktik reseptlər
16. 1 Klassik leksik axtarış (BM25)
Sahələr: 'title ^ 3', 'tags ^ 2', 'body ^ 1'.
Analizatorlar: dil-spesifik + lemmatizasiya.
Qısa sorğular üçün Fuzzy ('<= 3' tokenlər), 'fuzziness = 1'.
16. 2 Hibrid sparse + dense
1. ANN-axtarış sorğu embeddinq (k = 200)
2. Top-200 ilə birləşdirin BM25
3. Kalibrləmə və sızdırma (Reciprocal Rank Fusion)
4. Alın top-N (N = 20), opsion - rerank cross-encoder-om kifayət qədər büdcə ilə.
16. 3 Kataloqun faset naviqasiyası
Sərt pre-filter hüquqları/tenant
Post-filter fasetləri (aktiv filtrlər nəzərə alınmaqla counts)
Çeşidləmə: müvafiq və ya biznes sahəsi (qiymət/yenilik)
17) Sorğu nümunələri (psevdo-DSL)
Filtrlər və çeşidləmə:json
{
"query": "live casino,"
"filters": {
"country": ["EE","LV","LT"],
"license": ["MGA","UKGC"],
"launched_at": {"gte": "2023-01-01"}
},
"sort": ["_score:desc","launched_at:desc"],
"facets": ["country","license"],
"page": {"limit": 20, "cursor": "opaque"}
}
Geopoisk:
json
{
"query": "casino",
"geo": {"lat": 59. 437, "lon": 24. 753, "radius_km": 50}
}
Avtokomplekt:
json
{ "prefix": "evo", "field": "brand_suggest", "limit": 8 }
18) UX nümunələri
Aktiv filtr çipləri + «hər şeyi sıfırla».
Boş nəticələr: «cəhd...» (sinonim, filtr aradan qaldırılması).
«Sıfırda məsləhətlər»: populyar sorğular/kateqoriyalar.
Pagination kursor («Başqa» düyməsi) və sonsuz scroll; tətbiq olunan filtrlərin sabit göstəricisi.
Ayrı-ayrı açarlar «yazım səhvlərini nəzərə almaq», «ifadənin dəqiq uyğunluğu».
19) Tez-tez səhvlər və anti-nümunələr
Sıralamada tie-breaker yoxdur → dubl/atlama.
Aktiv filtrlər nəzərə alınmadan fasetlər → «saxta» counts.
Sıralamadan sonra giriş filtrlərinin tətbiqi.
Müxtəlif dillərin bir analizatorla qarışdırılması.
Seek-kursor əvəzinə OFFSET/LIMIT dərin paginasiyası.
Limitsiz fuzzy → gizli partlayış.
20) Giriş yoxlama siyahısı
1. Sahələri və onların növlərini təyin edin, per-locale analizatorlarını təyin edin.
2. Əks indeksi + (ops.) hazırlayın vektor ANN.
3. İstəkləri və təhlükəsiz giriş filtrlərini (pre-filter) həyata keçirin.
4. BM25 və sahə gücləndiricilərini konfiqurasiya edin; fasetləri qoşun.
5. Kursorları daxil edin (opaque, HMAC, TTL) və k-way merge.
6. Avtomatik kompüter, highlight, təhlükəsiz ekran əlavə edin.
7. Metriklər: gecikmə, NDCG @k, CTR; cache L1/L2.
8. Müvafiq sazlama üçün A/B framework.
9. SLA-nı sənədləşdirin: NRT gecikməsi, limit limitləri, sabitlik zəmanəti.
10. Miqrasiya planı: indeks, lüğət və analizatorların versiyaları.
Yaxşı dizayn edilmiş filtrasiya və tam mətn axtarış təbəqəsi yalnız sürətli bir indeks deyil, həm də kursorlarla, təhlükəsizliklə, proqnozlaşdırıla bilən UX və ölçülə bilən əhəmiyyət daşıyan aydın protokol müqaviləsidir. Bu yanaşma minlərlə milyardlarla sənədləri əhatə edir və həm klassik leksik axtarışı, həm də sinir şəbəkəsi sıralaması ilə müasir hibrid ssenariləri dəstəkləyir.