GH GambleHub

Filtrazione e ricerca a testo intero

1) Perché è necessario un livello di ricerca

Filtrazione e ricerca FTS (FTS) consentono un rapido accesso ai dati in senso e non solo alle chiavi primarie. Il livello di ricerca correttamente progettato combina:
  • Filtri rigorosi (categorie, date, prezzi, diritti di accesso)
  • Full text (partita lessicale e classificazione)
  • Sfaccettature (unità di navigazione)
  • Classificazione ibrida (BM25/TF-IDF + embedding vettoriali)
  • Protocolli affidabili (paginazione con cursori, TTL token, cross-sharding)

2) Quadro architettonico

Componenti:

1. Engest/ETL consente la normalizzazione, la deduplicazione, l'arricchimento, la creazione di campi per l'indice.

2. Indice inverso (vocaboli, documenti), strutture colevertebrali, indice vettoriale (HNSW/IVF-PQ).

3. Query Layer è un parker di query, applicazione di filtri/autorizzazioni, Planning shard, k-way merge.

4. Ranker → BM25 + (opz.) LTR/Neural re-rank.

5. Serving cache, cursori, sfaccettature, highlights, composito automatico.

6. Osservazione di metriche di latitanza, qualità, esperimenti A/B.

3) Modello di dati e indice

3. 1 Campi e analizzatori

Tipi: keyboard (corrispondenza regolare), text (analizzato), numerico/date/geo, vector.
Analizzatori: tornizzazione, normalizzazione (lowercase, unicode NFKC), filtri (parole stop, stemming/lemmatizzazione).
Multi-lingue: analizzatori per-field (ru, uk, en); Analisi ICU Traslazione; La contabilità della diacritica.

3. 2 Indice inverso (sparse)

Struttura: term → posting list (docID, term freq, posizioni).
Classificazione BM25 (o classico TF-IDF) con busti sul campo.

3. 3 Indice vettoriale (dense)

Embeddings del testo (ad esempio 384-1024-dimensione).
Strutture ANN: HNSW, IVF-PQ, Flat (per piccoli set).
Intimità di Cosinuss/inner product; calibrazione con BM25 (ibrido).

3. 4 Sfaccettature e unità

Precompilato/deposito di valori per count-ov veloci.
Sfaccettature gerarchiche (categoria/sottocategoria).
Intervalli (bin di prezzo, date).

4) Query: filtri + full text + ordinamento

4. 1 Contratti API (REST)

Richiesta:

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)
Risposta (sezione):
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 (semplificato)

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) Elaborazione del linguaggio naturale (NLP)

Tornizzazione/normalizzazione: Unicode-sicuro, conteggio dei difetti/apostrofi.
Le parole d'arresto sono elenchi personalizzati per lingua.
Remming vs lemmatizzazione: per ru/uk è meglio la lemmatizzazione (qualità> velocità).
Sinonimi: dizionari bidirezionali/direzionali; versioni dei dizionari TTL.
Guasti (fuzzy) - Damerau-Levenshttein con limiti di distanza e corrispondenza esatta.
N-gram/edge-ngrams - per l'autotrasportatore e suggerimenti.
Trasmissione: «shch», «mantello», «kiev/kyiv», regole di conformità.

6) Rilevanza e classificazione

6. 1 Scorciatoia lessicale di base

BM25 con impostazione «k1», «b» per raccolta.
Busti per campi (title ^ 3, tags ^ 1. 5, body^1).
Freschezza: 'score + = freshness _ boost (decay (created _ at)'.

6. 2 Segnali comportamentali

Click-through rate, dwell time, salvataggio in preferiti (con bayas anti-posizione).
Deduplicazione: pendenza dei documenti con un contenuto identico (MinHash/SimHash).

6. 3 Learning-to-Rank (LTR)

Phichi: BM25 per campo, lunghezza, freschezza, popolarità, corrispondenza per frase, scatto di posizione.
Modelli: LambdaMART/XGBoost; metriche offline NDCG @ k, MAP, Precision @ k; online A/B.

6. 4 Neuro-ricomposizione

Due fasi: recall (BM25/ANN) top-N (ad esempio 200) cross-encoder rainank.
Conteggio costi: budget tempo, fallback senza fase neuro durante il carico.

6. 5 Ricerca ibrida (sparse + dense)

Fusion (normalizzazione degli scatti e della somma) o multi-stage (dense come rainank).
La calibrazione è importante: min-max/z-score/quantile mapping.

7) Filtraggio, sfaccettature e accesso

7. 1 Filtri

Operatori: '=', 'IN', intervalli, prefissi, geo-bounding box/geo-distance.
Combinazioni dì AND "per filtri," OR "per valori multipli (brand IN...).
Tipo di sicurezza: i campi numerici non vengono analizzati come testo.

7. 2 Sfaccettature

Counts low cost per strutture preconfezionate.
Le sfaccettature applicate mostrano le altre varianti (post-filter faceting).

7. 3 Accesso/multi-tenenza

I filtri di protezione vengono integrati prima della classificazione (pre-filter).
ABAC/RBAC campi nel documento («tenant _ id», «visibility», «acl»).
Il token della richiesta è stato firmato; multi-tenante - filtro automatico «tenant _ id».

8) Paginazione, cursori e consistenza

La paginazione con il puntatore seek per «(score, tie-breaker)» o per «(created _ at, id)» durante l'ordinamento in base al tempo.
Opachi 'page _ token'c HMAC e TTL.
Consistenza: near-real-time (NRT) indice: ritardo 0. 5-2 c tra la registrazione e la visibilità. Documentalo in SLA.
Cross-shard: ricerca locale di → k-way merge in ordine globale, puntatori per-shard in token.

9) Completamento automatico e suggerimenti

Suggesters: prefix-trie / edge-ngrams по полю `title`.
Popolare queries: loghi click suggerimenti di popolarità + personalizzazione (segmenti).
Spell-as-you-type - Ricerca veloce fuzzy con limite di distanza «<= 1».

Esempio di REST


GET /v1/suggest? q=kaz&limit=8&locale=ru
→ ["casino," "casual games,..."]

10) Highlight e snippet

L'indice di posizione consente di recuperare frasi con corrispondenze.
Schermatura HTML, limite di lunghezza, unione di porzioni adiacenti.
Classificare gli snippet in base alla densità dei termini rilevanti.

11) Prestazioni, cache e SLO

Indici: segmenti caldi nella memoria compressione postings; doc values per le sfaccettature.
Cache: L1 (processo), L2 (Redis), cache sfaccettatura/aggregazione; invalidare la versione dell'indice.
SLO: P95 <150-200 ms a «k <= 20», P99 <500 ms; Disponibilità 99. 9%.
Backpressure: riduzione dì k ", disattivazione della fase neuro in caso di sovraccarico.
Rate limiting con la chiave API/utente/tenante.

12) Osservabilità e metriche di qualità

Tecnometriche:
  • `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`
Qualità (offline):
  • NDCG @ k, MAP, MRR, Recall @ k, Precision @ k su campionamenti segnati.
Online:
  • CTR@k, sCTR (satisfied clicks), dwell time, отказ (pogostick rate).

A/B - Fissare «guardrail» metriche (latitanza, errori) + target (NDCG proxy).

13) Test

Relevance unit test - Verifica delle partite previste in base alle richieste chiave.
Property-based - Resistenza a errori/sinonimi/lingue.
Paginazione: nessun duplicato al limite delle pagine (seek contract).
Protezione: i filtri di accesso vengono sempre applicati (anche su fabie-count).
Regressione dei dizionari: versioning dei sinonimi e delle regole fuzzy.

14) Sicurezza e privacy

Non indicizzare i campi PII come text; memorizzare/cifrare separatamente.
Minimizza i contenuti originali memorizzati (store = false, solo campi snippet).
Query privacy - Non logorare richieste crude con PII; Anonimato/hash.
Multi-tenant: isolamento rigoroso degli indici o filtro obbligatorio «tenant _ id».

15) Migrazioni e compatibilità

Versioning dello schema indice (v1→v2) con doppia voce e cambio graduale.
Compatibilità analizzatori - Mantenere le catene più vecchie fino a ridefinire.
Rotazione dei dizionari sinonimi/parole stop: «versione», «activated _ at», rollback.

16) Ricette pratiche

16. 1 Ricerca lessicale classica (BM25)

Campi: 'title ^ 3', 'tags ^ 2', 'body ^ 1'.
Analizzatori: linguaggio-specifico + lemmatizzazione.
Fuzzy per le query brevi ('<= 3' token), 'fuzzover= 1'.

16. 2 Ibrido sparse + dense

1. Ricerca ANN di embedding query (k = 200)

2. Unisci a top 200 BM25

3. Calibrazione e fusione (Rifrocal Rank Fusion)

4. Prendi la top-N (N = 20), l'opzione è rerank cross-encoder con un budget sufficiente.

16. 3 Navigazione a sfaccettatura della directory

Hard pre-filter diritti/tenante

Sfaccettature post-filtro (counts basati sui filtri attivi)

Ordinamento per appropriatezza o per campo aziendale (prezzo/novità)

17) Casi di query (pseudo-DSL)

Filtri e ordinamento:
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"}
}
Geoposizione:
json
{
"query": "casino",
"geo": {"lat": 59. 437, "lon": 24. 753, "radius_km": 50}
}
Composito automatico:
json
{ "prefix": "evo", "field": "brand_suggest", "limit": 8 }

18) pattern UX

Chip filtri attivi + reimposta tutto.
Risultati vuoti: mostra «prova...» (sinonimi, rimuovere il filtro).
Suggerimenti a zero - Query/categorie popolari.
Paginazione con il puntatore (pulsante ancora) e scroll infinito; indicatore fisso dei filtri applicati.
Singoli pulsanti «tenere conto dei bug», «corrispondenza esatta della frase».

19) Errori frequenti e anti-pattern

Nessun tie-breaker durante l'ordinamento delle riprese/corse.
Le sfaccettature non includono i filtri attivi per i counts «falsi».
Applica i filtri di accesso dopo la classificazione.
Mescolare lingue diverse con un analizzatore.
Paginazione profonda OFFSET/LIMIT al posto del cursore seek.
Fuzzy illimitato, esplosione di latitanza.

20) Chequlist di implementazione

1. Definire i campi e i relativi tipi e assegnare analizzatori per-locale.
2. Progettare l'indice inverso + (opz.) L'ANN vettoriale.
3. Implementare parser di query e filtri di accesso sicuri (pre-filter).
4. Personalizzare BM25 e i busti sul campo; Collegare le sfaccettature.
5. Digitare i cursori (opache, HMAC, TTL) e k-way merge per i chard.
6. Aggiungi compollette automatiche, highlights, schermatura sicura.
7. Metriche: latitanza, NDCG @ k, CTR; cache L1/L2.
8. A/B-framework per sintonizzare l'appropriatezza.
9. Documentazione SLA: ritardo NRT, limiti «limit», garanzia di consistenza.
10. Piano migrazioni: versioni indice, dizionari e analizzatori.

Un livello ben progettato di filtraggio e ricerca a testo intero non è solo un indice rapido, ma anche un chiaro contratto di protocollo con i cursori, la sicurezza, la prevedibile UX e l'appropriatezza misurabile. Questo approccio va da migliaia a miliardi di documenti e supporta sia la ricerca lessicale classica che gli scenari ibridi moderni con classificazione neurale.

Contact

Mettiti in contatto

Scrivici per qualsiasi domanda o richiesta di supporto.Siamo sempre pronti ad aiutarti!

Telegram
@Gamble_GC
Avvia integrazione

L’Email è obbligatoria. Telegram o WhatsApp — opzionali.

Il tuo nome opzionale
Email opzionale
Oggetto opzionale
Messaggio opzionale
Telegram opzionale
@
Se indichi Telegram — ti risponderemo anche lì, oltre che via Email.
WhatsApp opzionale
Formato: +prefisso internazionale e numero (ad es. +39XXXXXXXXX).

Cliccando sul pulsante, acconsenti al trattamento dei dati.