> For the complete documentation index, see [llms.txt](https://docs.opencityitalia.it/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.opencityitalia.it/sito-web/la-piattaforma/il-motore-di-ricerca.md).

# Il motore di ricerca

## 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.

L'indicizzazione avviene in automatico quando pubblichi un contenuto.

## Solr dentro l'architettura del CMS

Il CMS ha un'architettura monolitica: un core in PHP gestisce i contenuti e si appoggia a una persistenza principale, il database PostgreSQL. Attorno al core lavorano alcuni servizi di supporto, tra cui Solr stesso e un layer di cache HTTP (Varnish).

Solr è uno di questi servizi di supporto. Il core del CMS si collega ai componenti che gli servono in questo modo:

* **Solr**, il motore di ricerca: il core gli invia i contenuti da indicizzare tramite chiamate HTTP;
* **PostgreSQL**, la persistenza principale: il core legge e scrive qui i contenuti del sito tramite SQL;
* **Redis**, un archivio chiave-valore: conserva i dati temporanei delle sessioni utente;
* **sistema di posta**, esterno alla piattaforma: il core gli invia le email tramite protocollo SMTP.

In questo schema Solr riceve i dati dal core, ma non li possiede: la fonte resta sempre PostgreSQL.

## Come funziona l'indicizzazione

{% hint style="warning" %}
**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.
{% endhint %}

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, cioè i filtri per tipologia, categoria, data e altri criteri;
* applicare i filtri per classe di contenuto nelle ricerche avanzate.

Tutta la ricerca sul sito e i blocchi filtrabili si appoggiano a Solr: per queste funzioni il CMS non interroga mai direttamente il database PostgreSQL. Per i dataset personalizzati è disponibile il componente **occustomfind**.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.opencityitalia.it/sito-web/la-piattaforma/il-motore-di-ricerca.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
