Чыпкалоо жана толук текст издөө
1) Эмне үчүн издөө катмары керек
Чыпкалоо жана толук тексттүү издөө (FTS) негизги ачкычтар боюнча гана эмес, "маанисине жараша" маалыматтарды тез жеткиликтүүлүгүн камсыз кылат. Туура иштелип чыккан издөө катмары айкалыштырат:- Катуу чыпкалар (категориялар, даталар, баалар, кирүү укугу)
- Толук текст (лексикалык матч жана ранжирлөө)
- Фасеттер (навигация үчүн агрегаттар)
- Гибриддик рейтинги (BM25/TF-IDF + вектордук эмбеддинг)
- Ишенимдүү протоколдор (курсорлор, TTL токендер, кросс-шардинг)
2) Архитектуралык сүрөт
Компоненттери:1. Ingest/ETL → нормалдашуу, дедупликация, байытуу, индекс үчүн талааларды куруу.
2. Индекстор → тескери индекси (Лексемалар → документтер), колонка структуралар, вектордук индекси (HNSW/IVF-PQ).
3. Query Layer → Parser суроолор, чыпкаларды/кирүү укугун колдонуу, Чард планер, k-way мерге.
4. Ranker → BM25 + (опц.) LTR/Neural re-rank.
5. Serving → кэш, курсор, фасет, хайлайт, унаа плиталар.
6. Байкоо → жашыруун метрика, сапаты, A/B-эксперименттер.
3) Маалыматтар жана индекс модели
3. 1 Талаалар жана анализаторлор
Түрлөрү: keyword (тегиз дал келүү), text (талдоо), numeric/date/geo, vector.
Анализаторлор: токендештирүү, нормалдаштыруу (lowercase, Unicode NFKC), чыпкалар (stemming/lemmatization).
Көп тилдүүлүк: per-field анализаторлор (ru, uk, en); ICU-талдоо; транслитерация; диакритиканы эсепке алуу.
3. 2 тескери индекси (sparse)
Түзүмү: term → posting list (docID, term freq, позиция).
Ранжирлөө: BM25 (же классикалык TF-IDF) талаа күчкө ээ.
3. 3 Vector индекси (dense)
Тексттин эмбеддингдери (мисалы, 384-1024-өлчөмдүү).
ANN структуралар: HNSW, IVF-PQ, Flat (чакан топтомдор үчүн).
Косинус жакындыгы/inner product; BM25 менен калибрлөө (гибрид).
3. 4 Фасеттер жана агрегаттар
Precompyut/тез count үчүн баалуулуктарды сактоо.
Иерархиялык фасеттер (категория/подкатегория).
Диапазондор (баалар, даталар).
4) Суроолор: чыпкалар + толук текст + сорттоо
4. 1 API келишимдери (REST)
Суроо-талап:
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)
Жооп (фрагмент):
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 (жөнөкөй)
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) табигый тил иштетүү (NLP)
Токенизация/нормалдаштыруу: Unicode-коопсуз, дефис/апострофторду эсепке алуу.
Stop-сөздөр: тилдер боюнча жөндөө тизмелери.
Stemming vs lemmatization: ru/uk үчүн жакшы lemmatization (сапаты> ылдамдыгы).
Синонимдер: эки багыттуу/багыттуу сөздүктөр; TTL менен сөздүк чыгаруу.
Каталар (fuzzy): Damerau-Levenshtein аралыкты чектөө жана так дал күчкө ээ.
N-граммдар/edge-ngrams: унаа плитасы жана учтары үчүн.
Транслитерация: "shch", "kiev/kyiv" - шайкештик эрежелери.
6) Тиешелүү жана рейтинги
6. 1 Негизги лексикалык эсеби
BM25 'k1', 'b' орнотулган.
Талаалар боюнча бусталар (title ^ 3, tags ^ 1. 5, body^1).
Сергектик: 'score + = freshness_boost (decay (created_at))'.
6. 2 Жүрүм-турум сигналдары
Click-through rate, dwell time, тандалма сактоо (анти-позиция баяны менен).
Deduplication: ~ окшош мазмуну менен документтерди чаптоо (MinHash/SimHash).
6. 3 Learning-to-Rank (LTR)
Fiches: BM25, узундугу, сергектиги, популярдуулугу, сөз айкашынын дал келиши, турумдук ылдамдыгы.
Модели: LambdaMART/XGBoost; NDCG @k, MAP, Precision @k оффлайн-метриктер; онлайн A/B
6. 4 Нейро-кайра иштетүү
Эки этап: recall (BM25/ANN) → top-N (мисалы, 200) → cross-encoder rerank.
Баалуулукту эсепке алуу: тайм-бюджет, жүктөө учурунда нейро-этап жок fallback.
6. 5 Гибриддик издөө (sparse + dense)
Же fusion (ылдамдыкты жана сумманы нормалдаштыруу), же multi-stage (rerank катары dense).
Маанилүү калибрлөө: min-max/z-score/quantile mapping.
7) чыпкалоо, фасет жана жетүү
7. 1 чыпкалар
Операторлор: '=', 'IN', диапазондор, префикстер, geo-bounding box/geo-distance.
Комбинациялар: 'AND' сүзгүчтөр боюнча, 'OR' көп сандаган маанилердин ичинде (бренд IN...).
Типтүү коопсуздук: сандык талаалар текст катары талдоого алынбайт.
7. 2 Фасеттер
Алдын ала эсептелген структуралар боюнча арзан count-s.
"Колдонулган" фасеттер калган варианттарды көрсөтөт (post-filter faceting).
7. 3 Жеткиликтүүлүк/көп тенанттуулук
Коопсуздук чыпкалары рейтингге чейин интеграцияланат (алдын ала фильтр).
Документтеги ABAC/RBAC талаалары ('tenant _ id', 'visibility', 'acl').
Өтүнүч белгиси кол коюлган; көп тенант - автоматтык 'tenant _ id' чыпкасы.
8) Пагинация, курсорлор жана консистенттүүлүк
Убакыт боюнча сорттоодо '(score, tie-breaker) же' (created_at, id) 'боюнча seek-курсор менен пагинация.
Ачык эмес 'page _ token' c HMAC жана TTL.
консистенттүүлүк: near-real-time (NRT) индекси: кечигүү 0. 5-2 жазуу жана көрүү ортосунда. SLA документтештирүү.
Cross-shard: жергиликтүү издөө → дүйнөлүк тартипте k-way мерге, токендеги per-shard курсорлор.
9) Авто толуктоо жана кеңештер
Suggesters: prefix-trie / edge-ngrams по полю `title`.
Popular queries: Лог Clicks → популярдуулугу + жекелештирүү (сегменттер).
Spell-as-you-type: аралыкты чектөө менен fuzzy-издөө тез '<= 1'.
GET /v1/suggest? q=kaz&limit=8&locale=ru
→ ["casino," "casual games,..."]
10) Highlights жана сниппеттер
Позициялык индекс → дал келүүлөр менен сөз айкаштарын алуу.
HTML экранды, узундук чеги, кошуна үзүндүлөрдү бириктирүү.
Тиешелүү терминдердин тыгыздыгы боюнча сниппеттерди ранжирлөө.
11) аткаруу, кэш жана SLO
Индекстер: эс ысык сегменттер; компрессия postings; doc values фасеттер үчүн.
Кэш: L1 (процесс), L2 (Redis), фасет/агрегаттардын кэши; индекстин версиясы боюнча майып.
SLO: P95 <150-200 ms 'k <= 20', P99 <500 ms; жеткиликтүүлүгү 99. 9%.
Backpressure: кыскартуу 'k', ашыкча учурда нейро-этап өчүрүү.
API/колдонуучу/тенант ачкычына Rate limiting.
12) Байкоо жана сапат көрсөткүчтөрү
Техметриктер:- `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 белгиленген үлгүлөрдө.
- CTR@k, sCTR (satisfied clicks), dwell time, отказ (pogostick rate).
A/B: бекитүү "guardrail" метрика (жашыруун, каталар) + максаттуу (NDCG прокси).
13) сыноо
Relevance unit tests: негизги суроолор боюнча күтүлгөн матчтарды текшерүү.
Property-based: каталар/синонимдер/тилдерге туруктуулук.
Пагинация: беттердин чегинде дубликаттардын жоктугу (seek-контракттар).
Коопсуздук: кирүү чыпкалары ар дайым колдонулат (ал тургай faset-count).
Сөздүктөрдүн регрессиялары: синонимдерди жана fuzzy-эрежелерди версиялоо.
14) Коопсуздук жана купуялык
PII менен талаалар text катары индекстелбейт; өзүнчө сактоо/шифрлөө.
Сакталган баштапкы тексттерди минималдаштыруу (store = false, сниппеттер үчүн гана талаалар).
Query privacy: чийки суроолор PII менен логин жок; анонимдештирүү/хеширлөө.
Мультитенант: индекстерди катуу изоляциялоо же милдеттүү 'tenant _ id' чыпкасы.
15) Миграция жана шайкештик
Индекс схемасы версиясы (v1 → v2) кош жазуу жана акырындык менен которуу менен.
Анализаторлордун шайкештиги: эски чынжырларды кайра индекстегенге чейин кармап туруу.
Синоним сөздүктөрүн/токтоо сөздөрүн айлантуу: 'version', 'activated _ at', rollback.
16) Практикалык Recipes
16. 1 классикалык лексикалык издөө (BM25)
Талаалар: 'title ^ 3', 'tags ^ 2', 'body ^ 1'.
Анализаторлор: тил-өзгөчө + lemmatization.
Fuzzy үчүн кыска суроо ('<= 3' токендер), 'fuzziness = 1'.
16. 2 гибрид sparse + dense
1. ANN-издөө өтүнүч (k = 200)
2. Top-200 менен бириктирүү BM25
3. Калибрлөө жана бириктирүү (Reciprocal Rank Fusion)
4. Алып top-N (N = 20), кошумча - жетиштүү бюджет менен rerank cross-encoderom.
16. 3 Фасет багыттоо каталогу
Катуу pre-filter укуктар/тенант
Post-Filter фасеттер (активдүү чыпкаларды эске алуу менен counts)
Сорттоо: тиешелүү же бизнес-талаада (баа/жаңылык)
17) өтүнүч мисалдар (psevdo-DSL)
Чыпкалар жана сорттоо: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"}
}
Геопоиск:
json
{
"query": "casino",
"geo": {"lat": 59. 437, "lon": 24. 753, "radius_km": 50}
}
Автокомплит:
json
{ "prefix": "evo", "field": "brand_suggest", "limit": 8 }
18) UX үлгүлөрү
Чип активдүү чыпкалар + "баарын жок".
Бош натыйжалары: көрсөтүү "аракет..." (синонимдер, чыпканы алып салуу).
"Нөлдүк кеңештер": популярдуу суроолор/категориялар.
Пагинация курсор ("Дагы" баскычы) жана чексиз scroll; колдонулган чыпкалардын белгиленген көрсөткүчү.
Жеке "каталарды эске алуу", "сөз айкашынын так дал келиши".
19) Тез-тез каталар жана анти-үлгүлөрү
сорттоодо tie-breaker жок → дубль/ат чабыш.
активдүү чыпкалар эске албаганда фасеты → "жалган" counts.
Ранжирлөөдөн кийин кирүү чыпкаларын колдонуу.
Ар кандай тилдерди бир анализатор менен аралаштыруу.
Seek курсордун ордуна OFFSET/LIMIT терең пагинациясы.
Чексиз fuzzy → жашыруун жарылуу.
20) киргизүү текшерүү тизмеси
1. Талааларды жана алардын түрлөрүн аныктаңыз, per-locale анализаторлорун дайындаңыз.
2. Тескери индексти долбоорлоо + (опц.) Vector ANN.
3. Суроо-талап жана коопсуз кирүү чыпкаларын (алдын ала filter) ишке ашыруу.
4. Орнотуу BM25 жана талаа; фасеттерди туташтырыңыз.
5. Киргиле курсорлор (opaque, HMAC, TTL) жана k-way чардам.
6. Кошуу автоматтык, highlights, коопсуз экран.
7. Метрика: жашыруун, NDCG @k, CTR; кэш L1/L2.
8. тиешелүү тюнинг үчүн A/B-Framework.
9. SLA документтештирүү: NRT-кечигүү, лимиттер 'лимит', туруктуулук кепилдиги.
10. Миграция планы: индекстин, сөздүктөрдүн жана анализаторлордун версиялары.
Жакшы иштелип чыккан чыпкалоо жана толук текст издөө катмары - бул тез индекс гана эмес, ошондой эле курсорлор, коопсуздук, алдын ала UX жана өлчөнүүчү актуалдуулук менен так протокол келишими. Бул ыкма миӊдеген миллиарддаган документтерди масштабдуу жана классикалык лексикалык издөө, ошондой эле нейрондук тармактык ранжирлөө менен заманбап гибриддик жагдайлар колдойт.