Salta ai contenuti

Ricerca testo

Firestore non supporta la ricerca testo nativa, quindi dobbiamo affidarci a soluzioni esterne. Se specifichi un flag textSearchEnabled alla collezione, vedrai una barra di ricerca in cima alla vista collezione.

OpzioneCostoSetupMigliore per
Estensione Typesense (Consigliato)~$7-14/mese flat5 minLa maggior parte dei progetti
AlgoliaPrezzi per query15 minEnterprise, geo-search
Ricerca testo localeGratuita1 minPiccole collezioni (<1000 doc)

L’estensione FireCMS Typesense distribuisce un server di ricerca Typesense su una VM di Compute Engine e sincronizza automaticamente i tuoi dati Firestore.

  • 🔍 Ricerca tollerante agli errori di battitura - “headphnes” trova “headphones”
  • Risposte in sub-millisecondi
  • 💰 Costo mensile fisso - Nessun addebito per query
  • 🔄 Sincronizzazione in tempo reale - I documenti vengono indicizzati automaticamente

Prerequisiti:

  • Progetto Firebase con Firestore
  • Fatturazione GCP abilitata
  • gcloud CLI installato

Passo 1: Installa l’estensione

firebase ext:install https://github.com/firecmsco/typesense-extension --project=YOUR_PROJECT_ID

Passo 2: Concedi i permessi

export PROJECT_ID=your-project-id
export EXT_INSTANCE_ID=typesense-search # Nome default estensione
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:ext-${EXT_INSTANCE_ID}@${PROJECT_ID}.iam.gserviceaccount.com" \
--role="roles/compute.admin" --condition=None
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:ext-${EXT_INSTANCE_ID}@${PROJECT_ID}.iam.gserviceaccount.com" \
--role="roles/secretmanager.admin" --condition=None
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:ext-${EXT_INSTANCE_ID}@${PROJECT_ID}.iam.gserviceaccount.com" \
--role="roles/datastore.user" --condition=None

Passo 3: Provisiona il server di ricerca

curl "https://REGION-PROJECT_ID.cloudfunctions.net/ext-typesense-search-provisionSearchNode"

Attendi ~2 minuti. I documenti esistenti vengono indicizzati automaticamente.

Naviga in Impostazioni progetto e configura:

ImpostazioneValore
RegioneLa regione della tua estensione (es., us-central1)
ID istanza estensioneDefault: typesense-search

FireCMS Cloud si connette automaticamente alla tua istanza Typesense.

import { buildFireCMSSearchController, useFirestoreDelegate } from "@firecms/firebase";
const textSearchControllerBuilder = buildFireCMSSearchController({
region: "us-central1", // La regione della tua estensione
extensionInstanceId: "typesense-search" // Nome default
});
export function App() {
const firestoreDelegate = useFirestoreDelegate({
firebaseApp,
textSearchControllerBuilder
});
// ... resto della tua app
}

Algolia è un servizio di ricerca gestito con prezzi per query. Consigliato per esigenze enterprise o funzionalità avanzate come la geo-ricerca.

Devi definire un FirestoreTextSearchControllerBuilder e aggiungerlo alla tua configurazione. Configura un account Algolia e sincronizza i documenti usando la loro estensione Firebase.

import { algoliasearch, SearchClient } from "algoliasearch";
import {
performAlgoliaTextSearch,
buildExternalSearchController,
FirestoreTextSearchController,
buildCollection,
FireCMSCloudApp,
EntityCollectionsBuilder,
FireCMSAppConfig
} from "@firecms/cloud";
const client: SearchClient | undefined = algoliasearch("YOUR_ALGOLIA_APP_ID", "YOUR_ALGOLIA_SEARCH_KEY");
const algoliaSearchController = buildExternalSearchController({
isPathSupported: (path) => path === "products",
search: async ({
path,
searchString
}) => {
if (path === "products") {
return performAlgoliaTextSearch(client, "products", searchString);
}
return undefined;
}
});
const appConfig: FireCMSAppConfig = {
version: "1",
textSearchControllerBuilder: algoliaSearchController,
// ...
}
import { algoliasearch, SearchClient } from "algoliasearch";
import { buildExternalSearchController, performAlgoliaTextSearch } from "@firecms/firebase";
const client: SearchClient | undefined = algoliasearch("YOUR_ALGOLIA_APP_ID", "YOUR_ALGOLIA_SEARCH_KEY");
const algoliaSearchController = buildExternalSearchController({
isPathSupported: (path) => path === "products",
search: async ({
path,
searchString
}) => {
if (path === "products")
return performAlgoliaTextSearch(client, "products", searchString);
return undefined;
}
});
export function App() {
// ...
const firestoreDelegate = useFirestoreDelegate({
firebaseApp,
textSearchControllerBuilder: algoliaSearchControllerBuilder
});
// ...
}

Da FireCMS v3 forniamo un’implementazione di ricerca testo locale. Questo è utile per piccole collezioni o quando vuoi fornire un modo rapido per cercare nei tuoi dati.

Tuttavia, per collezioni più grandi, vorrai usare un provider di ricerca esterno, come Algolia. Questo è l’approccio consigliato.

Puoi usare la ricerca testo locale in FireCMS Cloud, o nelle versioni self-hosted.

Per FireCMS Cloud, devi solo abilitarla nell’UI.

Per le versioni self-hosted, puoi abilitarla impostando localTextSearchEnabled in useFirestoreDelegate. Poi devi marcare ogni collezione con textSearchEnabled: true.

Se hai dichiarato un provider di indicizzazione esterno, la ricerca testo locale sarà efficace solo per i percorsi non supportati dal provider esterno.