Una libreria Python che combina ricerca testuale e semantica in un unico file
Il database più diffuso al mondo è anche il più invisibile. SQLite è incluso in tutti i sistemi operativi popolari e gira dentro smartphone, browser, applicazioni desktop. Una presenza enorme, quasi mai percepita. Nei giorni scorsi un paper comparso su arXiv ha presentato una libreria Python che consente ricerca lessicale, semantica e ibrida dentro quel database. Si chiama scrydb ed è disponibile sotto licenza MIT. Non è una roadmap: è codice che chiunque può già scaricare e usare.
Il database più diffuso ora cerca in tre modi
Scrydb non aggiunge un solo motore di ricerca a SQLite: ne combina due. Per la ricerca lessicale usa FTS5, l’estensione di ricerca full-text di SQLite, quella che trova le parole esattamente come sono scritte. Per la ricerca semantica si appoggia a sqlite-vec, un’estensione SQLite per la ricerca vettoriale, quella che trova contenuti vicini per significato anche quando le parole non coincidono. La ricerca ibrida fonde i due risultati in un’unica lista. Se SQLite è ovunque, questa capacità ha un pubblico potenziale molto ampio.
Ma la vera difficoltà non è accendere due motori di ricerca. È farli convivere quando i punteggi che producono non parlano la stessa lingua.
Punteggi incomparabili, un solo file
La ricerca vettoriale misura una distanza: quanto un documento è vicino a un vettore di query nello spazio degli embedding. La ricerca lessicale FTS5 produce un punteggio di rilevanza: quanto le parole del documento corrispondono ai termini cercati. Sono due scale diverse, due ordini di grandezza diversi, due logiche di calcolo diverse. Confrontarli direttamente non ha senso. Come spiega Simon Willison, i punteggi di distanza vettoriale e quelli di rilevanza FTS non sono confrontabili tra loro: non funzionano come numeri da sommare o pesare.
La soluzione usata da scrydb si chiama Reciprocal Rank Fusion, o RRF. Non tenta di confrontare i punteggi: li usa soltanto per ordinare i risultati all’interno di ciascun insieme. Poi combina le posizioni. Un documento che compare in alto in entrambe le liste finirà in alto anche nel risultato ibrido, senza bisogno di normalizzare scale diverse. È un espediente semplice, ma evita il problema alla radice.
C’è un’ultima conseguenza concreta. In scrydb, i documenti grezzi, i loro embedding e l’indice lessicale sono memorizzati in un singolo file SQLite. Non servono un database per i testi, un servizio separato per i vettori e un altro per gli indici. Tutto viaggia insieme. Backup, distribuzione e controllo delle versioni si riducono alla gestione di un file, non di un’architettura.
La portabilità come conseguenza
La scelta di sqlite-vec non è secondaria. sqlite-vec, la dipendenza chiave di scrydb, è una nuova estensione SQLite per la ricerca vettoriale scritta interamente in C, senza dipendenze, con doppia licenza MIT/Apache-2.0. In pratica: non si porta dietro server, servizi cloud o librerie esterne. Si compila e sta dentro SQLite, esattamente come FTS5. Questo rende scrydb portabile quasi per definizione. Se il tuo sito, la tua applicazione o il tuo archivio usa già SQLite, la ricerca ibrida può viaggiare nello stesso file dei dati, sotto licenze permissive.
La tensione che resta è operativa, non tecnica. sqlite-vec è un’estensione giovane, e adottare oggi scrydb significa accettare un ecosistema ancora in costruzione. Chi pubblica online può scegliere se integrare la libreria subito oppure osservare per qualche mese l’evoluzione della dipendenza che fa il lavoro semantico. In entrambi i casi, il costo di ingresso è molto più basso di un progetto infrastrutturale separato.
Per chi pubblica online, la ricerca ibrida smette di essere un’infrastruttura da costruire. Può vivere nel database che già usi, nello stesso file dei tuoi dati, sotto licenze permissive. La barriera non è più tecnica, ma di abitudine.
