Vai al contenuto

Ricerca semantica in una community: qualità dei risultati e LCP

Una community fan italiana ottimizzata per ricerca semantica: LCP da 5s a 200ms

In una community dedicata a serie TV, una ricerca può contenere un titolo preciso oppure il ricordo di una scena. La ricerca per parole e quella semantica rispondono a esigenze diverse. Per migliorare l’archivio proverei entrambe, misurando la qualità dei risultati separatamente dalla velocità di caricamento della pagina.

Il lavoro con realtà editoriali e community mi porta spesso a questa distinzione: un sito può essere rapido e restituire contenuti poco pertinenti, oppure trovare il pezzo giusto dentro un’interfaccia lenta. Correggere uno dei due problemi non dimostra di aver risolto l’altro.

Costruire un piccolo catalogo delle ricerche

Raccoglierei query rappresentative: nome di una serie, personaggio, episodio, citazione e descrizione di un evento. Inserirei errori di battitura, nomi tradotti e ricerche per cui nell’archivio non esiste una risposta.

Un editor dovrebbe indicare quali documenti sono pertinenti e quali contengono spoiler rispetto al contesto della query. Una recensione del finale può essere attinente alla serie e tuttavia inadatta a chi sta cercando informazioni sul primo episodio.

Dividerei gli esempi usati per tarare il sistema da quelli impiegati nel confronto finale. Se aggiusto i pesi guardando sempre le stesse query, rischio di ottimizzare una dimostrazione invece del servizio.

Integrare ricerca per parole e vettori

Typesense permette di combinare ricerca testuale, vettoriale e filtri. La documentazione della ricerca vettoriale e ibrida descrive come indicizzare embedding e fondere i ranking. Il peso relativo dei due segnali va verificato sulle query del sito.

Per un nome esatto, il match lessicale può essere decisivo; per una descrizione, la rappresentazione semantica può recuperare un articolo che usa parole differenti. Eviterei di eliminare il primo comportamento per introdurre il secondo.

Nel documento indicizzato conserverei identificatore stabile, titolo, URL, stato di pubblicazione e metadati utili come serie, stagione ed episodio quando disponibili. La dimensione del vettore deve corrispondere al modello scelto. Documenti e query devono usare rappresentazioni compatibili, incluse eventuali istruzioni previste dal modello.

L’indice deve seguire le modifiche del CMS

La prima indicizzazione è soltanto l’inizio. Il sistema deve aggiornare un articolo corretto, rimuovere quello ritirato e riconoscere una modifica dello slug. Per gli utenti autenticati deve rispettare anche ciò che ciascuno può vedere.

Per testi lunghi confronterei una rappresentazione dell’intero articolo con segmenti più piccoli. I segmenti possono rendere rintracciabile una scena specifica, ma richiedono di raggruppare i risultati e impedire che lo stesso articolo occupi tutta la prima pagina.

Annoterei modello e versione della pipeline nell’indice. Cambiare modello senza ricostruire i vettori incompatibili può rendere il confronto privo di significato. Un alias o un passaggio controllato tra indici aiuta a collaudare la nuova versione prima di esporla.

Misurare rilevanza e tempo della ricerca

Confronterei ricerca attuale, lessicale migliorata e ibrida sullo stesso test. Oltre a contare i risultati, guarderei posizione del primo contenuto utile, pertinenza dei primi risultati e gestione delle query senza risposta.

Misurerei separatamente generazione dell’embedding della query, tempo del motore e risposta completa al browser. Il p95 del solo motore non descrive il tempo percepito quando servono anche rete, autenticazione e rendering.

Un click è un segnale utile, ma può dipendere da titolo e posizione. Non lo tratterei come un giudizio infallibile di rilevanza. Un campione rivisto dalla redazione aiuta a capire perché una variante sembra migliore.

Il LCP riguarda la pagina che arriva al lettore

Il Largest Contentful Paint misura quando viene visualizzato il principale elemento di contenuto nel viewport. Per la stessa navigazione comprende anche il tempo che precede la risposta del server: non può essere interpretato come il solo tempo della query di ricerca.

Userei i dati sul campo per osservare l’esperienza degli utenti e le prove di laboratorio per diagnosticare. Periodo, dispositivo, URL o aggregazione per origine devono restare espliciti nel confronto.

Seguendo i criteri di ottimizzazione del LCP, controllerei scoperta e priorità dell’immagine principale, risposta del server e lavoro che ritarda il rendering. Eviterei il lazy loading sull’immagine che determina il LCP; non assegnerei però alta priorità a ogni immagine.

La consegna comprende così due evidenze: una ricerca che trova meglio i contenuti sul test editoriale e una pagina misurata nelle condizioni definite. Nessuno dei due risultati richiede di inventare una percentuale per raccontare il valore del lavoro.