Motore di ricerca (Solr)
Il CMS usa Apache Solr come motore di ricerca full-text tramite l'estensione ezfind. Ogni istanza della piattaforma ha il proprio core Solr dedicato, che contiene una copia indicizzata di tutti i contenuti pubblicati.
Come funziona l'indicizzazione
Quando pubblichi o modifichi un contenuto, il CMS lo invia automaticamente a Solr per l'indicizzazione. Il componente ocsearchtools si occupa di:
tradurre le query degli utenti nel formato Solr;
gestire la navigazione a faccette (filtri per tipologia, categoria, data...);
applicare i filtri per classe di contenuto nelle ricerche avanzate.
Tutta la ricerca sul sito e i blocchi filtrabili si appoggiano a Solr: non vengono eseguite query dirette al database PostgreSQL per queste funzioni. Per dataset personalizzati è disponibile il componente occustomfind.
Solr è una copia dei dati, non la fonte. Il database PostgreSQL rimane la fonte autoritativa. Solr rispecchia ciò che c'è nel database, ma solo per i contenuti che sono stati indicizzati. Un contenuto non presente in Solr non compare nella ricerca né nei blocchi filtrabili, anche se esiste nel database.
Quando serve un reindice manuale
L'indicizzazione automatica copre il flusso normale di pubblicazione. Esistono però situazioni in cui l'indice Solr può disallinearsi dal database e richiede un reindice manuale:
Primo avvio: dopo l'installazione, l'indice è vuoto e va popolato;
Modifica del modello dei contenuti: se aggiungi un nuovo attributo a una classe di contenuto, i contenuti già esistenti di quella classe non vengono re-indicizzati automaticamente; è necessario un reindice esplicito per quella classe;
Disallineamento dopo migrazione o ripristino: a seguito di migrazioni di database, ripristini da backup o importazioni massive, l'indice Solr può non corrispondere più al database.
Il reindice è un'operazione onerosa in termini di risorse. Puoi eseguirlo su una singola classe di contenuto oppure su tutti i contenuti: preferisci il reindice parziale quando conosci esattamente quali classi sono coinvolte.
Last updated
Was this helpful?