Whoosh come motore di ricerca per un blog

Da un bel po’ di tempo il mio sito sta aspettando un bell’aggiornamento, ma ogni volta mi blocco per un motivo o per l’altro. Questa volta è stato il turno della ricerca.

Questa funzionalità è una delle più complicate da implementare, per una moltitudine di fattori, che vanno dalla necessaria attenzione alle prestazioni al fatto che la ricerca non è un problema con una soluzione precisa. Non a caso i motori di ricerca di oggi si basano completamente su algoritmi di machine learning, che però per un piccolo sito come il mio, che vuole comunque offire questa possibilità, sarebbe un’esagerazione, peraltro impossibile, in quanto non avrei nemmeno i dati per il training.

In ogni caso, non voglio rimuovere questa funzionalità dal sito, né implementarla in maniera troppo inefficace, né rivolgermi a servizi di terzi, quindi mi sono guardato un po’ attorno per decidere sul da farsi e ho provato diverse soluzioni.

Come già annunciato, sto lavorando in Python, con Django, quindi il mio primo passo è stato provare Haystack.

Questo è un framework che fa da ponte tra i modelli dell’ORM di Django e diversi backend per la ricerca, tra cui i celebri Elasticsearch e Solr, entrambi basati su Apache Lucene, e i meno famosi Xapian e Whoosh. Precisamente Haystack mette a disposizione delle API agnostiche dal backend per indicizzare, eseguire ricerche ed altre operazioni sui modelli di Django. Quindi, una volta creato il codice basato su Haystack, si possono facilmente provare i vari backend. … [Leggi il resto]

Django

Ultimamente sto valutando i problemi di PHP, il linguaggio che ho usato più di tutti assolutamente negli ultimi 7 anni (o più).

PHP è un linguaggio in continua evoluzione: ho cominciato con PHP 4.4, da allora ci sono stati parecchi cambiamenti, per farlo diventare un linguaggio più orientato agli oggetti, tuttavia rimangono certi misteri come molti overhead aggiunti, sembra per niente, certe modalità di interpretazione tutte sue (vedasi operatore ternario).

Un altro buonissimo linguaggio è Python: è sempre libero e molto potente. Inoltre negli ultimi anni il suo uso per il web si è esteso parecchio.

Un nome associato a Python per il web è proprio Django, un framework molto interessante e utilizzato anche da Instagram.

L’ho sperimentato un po’, seguendo anche il tutorial sulla prima applicazione (un sondaggio) e ne sono rimasto davvero impressionato: è molto semplice e veloce da utilizzare. Bastano pochi secondi per poter creare un progetto e cominciare subito a lavorare.

Avevo utilizzato ancora un framework in PHP (CakePHP, se non sbaglio), ma non mi ero trovato benissimo.

La caratteristica da cui sono rimasto più impressionato è la gestione dei dati: non serve conoscere SQL, il framework crea automaticamente le tabelle e le query in base alle classi e ai metodi.

Ciò rende più facile anche l’utilizzo di una shell Python, che il framework prepara con tutte le impostazioni pronte e l’amministrazione.

Inoltre il Python mi ispira una grande versatilità: potrebbe essermi utile un processo diverso dal server web per elaborare dei dati, nonché l’integrazione con altri software, e con Django tutto ciò sembra parecchio semplice, in quanto fortemente modulare.

Non escludo di portare questo sito su Django, anzi, sarebbe parecchio interessante. Tra l’altro il VPS Classic 1 e l’hosting base di OVH hanno lo stesso prezzo, per cui sono ancora più allettato 😉 .