Ֆիլտրում և ամբողջական որոնում
1) Ինչո՞ ւ է անհրաժեշտ որոնման շերտը
Ֆիլտրը և ամբողջական տեքստային որոնումը (FFC) ապահովում են արագ հասանելիություն տվյալների «իմաստով», և ոչ միայն առաջնային բեկորների վրա։ Որոնման ճիշտ նախագծված շերտը համատեղում է
Խիստ ֆիլտրեր (կատեգորիաներ, ամսաթվեր, գներ, հասանելիության իրավունքներ)
Լիխտեքստ (լեքսիկ խաղ և ռենջացիա)
Ֆասետներ (նավարկության ագրեգատներ)
Հիբրիդային դասակարգում (BM25/TF-IDF + վեկտորային սաղմեդդինգներ)
Հուսալի արձանագրություններ (պագինացիա կուրսորների, TTL Տոկենի, Քրոս Շարդինգի)
2) Ճարտարապետական նկարը
Բաղադրիչները
1. Ingest/ETL-ն պարունակում է նորմալացում, deduplication, հարստացում, դաշտերի կառուցում ինդեքսի համար։
2. Ինդեքսատորը հաստատեց հակադարձ ինդեքսը (lexems), կոլոնային կառուցվածքները, վեկտորային ինդեքսը (HNSW/IVF-PQ)։
3. Query Layer-ը բացատրում է հարցումների պարսերը, ֆիլտրերի/մուտքի իրավունքների օգտագործումը, շարքերի պլանավորողը, k-way merge-ը։
4. Ranker no BM25 + (op.) LTR/Neural re-rank.
5. Serving winkash, կուրսորներ, ֆասետներ, hailyts, ավտոնիտիտ։
6. Լատենտության, որակի, A/B փորձարկումների հաճախականությունը։
3) Տվյալների և ինդեքսի մոդելը
3. 1 Դաշտեր և վերլուծողներ
Տեսակներ ՝ keyword (հավասար զուգադիպություն), numeric/date/geo, vector։
Վերլուծողները 'թունավորում, նորմալացում (lowercae, Unicode NFKC), ֆիլտրեր (stop-բառեր, stemming/lemmatization)։
Բազմալեզու 'per-field վերլուծողներ (ru, uk, en); ICU վերլուծություն; տրանսլիտերացիա; Ռուսական դիակրիտիկներ։
3. 2 Հակադարձ ինդեքսը (sparse)
Կառուցվածքը ՝ term www.posting list (docID, term freq, դիրքեր)։
Ռանգինգը 'BM25 (կամ դասական TF-IDF) դաշտային բուստերով։
3. 3 Վեկտորային ինդեքսը (dense)
Տեքստի էմբեդինգները (օրինակ ՝ 244-1024-չափավոր)։
ANN կառուցվածքները ՝ HNSW, IVF-PQ, Flat (փոքր հավաքածուների համար)։
Կոսինուսի հարևանությունը/inner prot; տրամաչափը BM25-ից (հիբրիդ)։
3. 4 Ֆասետներ և ագրեգատներ
Precompute/հսկայական արժեքներ արագ 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-բառերը 'լեզուների տրամադրության ցուցակներ։
Stemmming vs lemmatization: ru/uk-ի համար ավելի լավ է լեմմատիզացումը (որակը> արագություն)։
Հոմանիշներ ՝ երկվորյակ/ուղղիչ բառարաններ։ բառարանների տարբերակները TTL-ից։
Տպագրությունները (fuzzy): Damerau-Levronhtein-ը, հեռավորության սահմանափակումով և ճշգրիտ համընկնման թփերով։
N-grams/edge-ngrams: ավտորիտիտի և հուշումների համար։
Տրանսսլիտերացիա ՝ "shch" noved "," kiev/ky.ru "- ագրեսիայի կանոնները։
6) Ռելեվանտիզմը և դասակարգումը
6. 1 Հիմնական lextic corping
BM25 պարամետրով 'k1', «b» հավաքածուի վրա։
Թփերը դելմ (title ^ 3, tags ^ 1։ 5, body^1).
Թարմ '«score + = freshness _ boost (decay (created _ at)»։
6. 2 Վարքագծային ազդանշաններ
Click-through rate, www.elll time, պահպանեք ընտրված (հակա-դիրքային բայասի հետ)։
Deduplications: Փաստաթղթերի սկլանավորումը համապատասխան նույնական պարունակությամբ (MinHash/SimHash)։
6. 3 Learning-to-Rank (LTR)
Ֆիչին ՝ BM25, երկարությունը, թարմությունը, ժողովրդականությունը, արտահայտության համընկնումը, դիրքային ժայռը։
Մոդելներ ՝ Lambert MART/XGBoost; NDCG @ k, MAP, Precision @ k; Առցանց A/B
6. 4 Նյարդային փոխակերպում
Երկու էթապկա ՝ recall (BM25/ANN) www.top-N (օրինակ, 200) www.cross-encoder rerank։
Արժեքի բարձրացումը 'թայմ բյուջե, fallback առանց նյարդային փուլի բեռի։
6. 5 Ստացիոնար որոնում (sparse + dense)
Կամ fusion (ոսկորների և գումարի նորմալացում) կամ multi-stage (dense որպես rerank)։
Տրամաչափումը կարևոր է ՝ min-max/z-score/quantile mapping։
7) Ֆիլտրը, ֆասետները և հասանելիությունը
7. 1 Ֆիլտրեր
Օպերատորներ ՝ «=», «IN», միջակայքներ, նախածանցներ, geo-bounding bant/geo-distae։
Համադրություններ ՝ «AND» ֆիլտրերի վրա, «OR» բազմաթիվ արժեքների ներսում (brand IN...)։
Այսպիսով, թվային դաշտերը չեն վերլուծվում որպես տեքստ։
7. 2 Ճակատներ
Էժան կոունտ-ները կանխատեսելի կառուցվածքներով։
«Օգտագործված» ֆասետները ցույց են տալիս մնացած տարբերակները (post-inter faceting)։
7. 3 Մուտք/մուլտֆիլմ-տենանտիզմ
Անվտանգության ֆիլտրերը ինտեգրվում են մինչև դասակարգումը (pre-inter)։
ABAC/RBAC դաշտերը փաստաթղթում («tenom _ id», «visibility», «acl»)։
Թոկենը ստորագրվել է. multi tenante - ավտոմատ 'tenium _ id' ֆիլտրը։
8) Պագինացիա, կուրսորներ և կոնսիստենտություն
«(score, tie-breaker)» կամ «(created _ at, id)» ժամանակի տեսակավորման ժամանակ։
Անթույլատրելի «page _ token 'c HMAC և TTL»։
Կոնսիստենտություն ՝ near-real-time (NRT) ինդեքսի ինդեքսը '0 ուշացում։ 5-2 հետ ձայնագրման և տեսանելիության միջև։ Փաստաթղթավորեք դա SLA-ում։
Քրոս Շարդ 'տեղական որոնումը www.k-way merge-ը գլոբալ կարգի, per-shard դասընթացների վրա։
9) Ավտոմատացում և հուշումներ
Suggesters: prefix-trie / edge-ngrams по полю `title`.
Popular queries: Տեսահոլովակների լոգը ցույց է տալիս, որ հայտնի է + կերպարիզացիա (հատվածներ)։
Spell-as-type-ը արագ fuzzy-որոնումն է, որը սահմանափակվում է «<= 1» հեռավորությամբ։
REST-ի օրինակ
GET /v1/suggest? q=kaz&limit=8&locale=ru
→ ["casino," "casual games,..."]
10) Հայլայթ և նեպետներ
Դիրքային ինդեքսը բացատրում է ֆրազների ներարկումը զուգադիպությունների հետ։
HTML-ի էկրանավորումը, երկարության սահմանը, հարևան բեկորների միավորումը։
Նեպետների դասակարգումը ռևլանտային տերմինների խտության վրա։
11) Արտադրողականությունը, քեշը և SLO-ն
Ինդեքսներ 'տաք հատվածներ հիշողության մեջ։ postings; doc values ճակատների համար։
Քաշ 'L1 (գործընթացը), L2 (Redis), ֆասետների/ագրեգատների կաշ; հաշմանդամացնել ըստ ինդեքսի։
SLO: P95 <150-200 ms «k <= 20», P99 <500 ms; 99 հասանելիություն։ 9%.
Backpressure: նվազում է 'k', նյարդային փուլի անջատումը ծանրաբեռնվածության ժամանակ։
Rate limiting-ը API/օգտագործողի/tenault-ի բանալին։
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`
Որակը (offline)
NDCG @ k, MAP, MRR, Recall @ k, Precision @ k տարբերակված նմուշների վրա։
Առցանց
CTR@k, sCTR (satisfied clicks), dwell time, отказ (pogostick rate).
A/B: Գրեք «guardrail» (լատենտ, սխալներ) + 108 (NDCG proxy)։
13) Թեստավորում
Relevensit untes.ru: Ակնկալվող դեղամիջոցների ստուգումը հիմնական պահանջներով։
Property-based-ը 'տպագրությունների դիմադրություն/հոմանիշներ/լեզուներ։
Պագինացիա 'կրկնօրինակների բացակայություն էջերի սահմանին (seek պայմանագրեր)։
Անվտանգությունը 'հասանելիության ֆիլտրերը միշտ օգտագործվում են (նույնիսկ faset-count)։
Բառարանների ռեգրեսները 'հոմանիշների տարբերակումը և ֆուզզիի կանոնները։
14) Անվտանգությունն ու գաղտնիությունը
PII-ի հետ դաշտերը չեն ինդեքսավորվել որպես ռուսական; պահել առանձին/ծածկագրել։
Նվազագույնի հասցնել պահպանված սկզբնական տեքստերը (store = false, միայն հատիկների դաշտերը)։
Query privacy: Մի տրամաբանեք հացի հարցումները PII-ի հետ։ անանուն/հեշթինգ։
Multi-tenant-ը ինդեքսների խիստ մեկուսացումն է կամ պարտադիր 'tenium _ id' ֆիլտրը։
15) Մոսկվան և համատեղելիությունը
Ինդեքսի սխեմայի տարբերակումը (v1 71 v2) կրկնակի ձայնագրությամբ և աստիճանական անցումով։
Վերլուծողների համատեղելիությունը 'պահել հին շղթաները դեռ չեն փոխակերպվում։
Հոմանիշների/ստոպի բառերի բառարանների լուծարումը '«version», «activated _ at», rollback։
16) Գործնական բաղադրատոմսեր
16. 1 Դասական լեքսիկ որոնում (BM25)
Դաշտեր ՝ «title ^ 3», «tags ^ 2», «body ^ 1»։
Վերլուծողներ 'հատուկ լեզուն + լեմմատիզացիա։
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), oporational - rerank cross-encoder-ը բավարար հաճախականությամբ։
16. 3 Ճակատային նավարկություն
Կոշտ pre-inter իրավունքների/tenantu
Փոստի ֆիլտրային ֆասետները (counts, հաշվի առնելով ակտիվ ֆիլտրերը)
Տեսակավորումը 'ռելեվանտությամբ կամ բիզնես դաշտով (գինը/նորություն)
17) Հարցումների օրինակներ (կեղծ-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-patterns
Ակտիվ ֆիլտրերի չիպերը + «նետել ամեն ինչ»։
Դատարկ արդյունքներ 'ցույց տալ «փորձեք...» (հոմանիշ, ֆիլտրը հեռացնել)։
«Նշումներ զրոյի ժամանակ» 'հայտնի հարցումներ/կատեգորիաներ։
Պագինազիան կուրսով (կոճակ «Դեռ») և անվերջ սկրոլը։ օգտագործված ֆիլտրերի ֆիքսված ցուցիչը։
«Հաշվի առնել տպագրությունները», «արտահայտության ճշգրիտ համընկնում»։
19) Հաճախակի սխալներ և հակատիպեր
Tie-breaker-ի բացակայությունը wwww.duble/Skaker-ի տեսակավորման ժամանակ։
Ֆասետները առանց հաշվի առնելու ակտիվ ֆիլտրերը «կեղծ» կոունտսը։
Մուտքի ֆիլտրերի օգտագործումը դասակարգումից հետո։
Տարբեր լեզուների խառնուրդը մեկ վերլուծություն է։
MSSET/LIMIT խորը պագինացիա seek-կուրսորի փոխարեն։
Անսահմանափակ fuzzy-ը ցույց է տալիս լատենտության պայթյունը։
20) Ներդրման չեկլիստ
1. Դաշտերի իրականացումը և նրանց տեսակները, նշանակեք per-entale վերլուծողներ։
2. Նախագծեք հակադարձ ինդեքսը + (opc.) վեկտորային ANN։
3. Իրականացրեք հարցումների պարսերը և անվտանգ հասանելիության ֆիլտրերը (pre-inter)։
4. Patte BM25 և դաշտային թփեր; միացրեք ճակատները։
5. Մուտքագրեք կուրսորները (opaque, HMAC, TTL) և k-way merge շարդերով։
6. Ավելացրեք ավտորիտիտը, հայելթները, անվտանգ էկրանավորումը։
7. Մետրիկները ՝ լատենտություն, NDCG @ k, CTR; kash L1/L2։
8. A/B-ֆրեյմորքը ռելեվանտիզմի թյունինգի համար։
9. Փաստաթղթավորեք SLA: NRT ուշացում, limit ", կոնսիստենտության երաշխիք։
10. Միգրացիայի պլանը 'ինդեքսի, բառարանների և վերլուծողների տարբերակները։
Ֆիլտրի և ամբողջական որոնման լավ նախագծված շերտը ոչ միայն արագ ինդեքսն է, այլ նաև հստակ պրոտոկոլային պայմանագիրը կուրսորների, անվտանգության, կանխատեսելի UX-ի և չափված ռելեվանտիզմի հետ։ Այս մոտեցումը մեծանում է հազարից միլիարդավոր փաստաթղթերից և աջակցում է ինչպես դասական լեքսիկ որոնումը, այնպես էլ ժամանակակից հիբրիդային սցենարները նյարդային դասակարգման հետ։