Zum Inhalt springen

Textsuche

Firestore unterstützt keine native Textsuche, daher müssen wir auf externe Lösungen zurückgreifen. Wenn Sie ein textSearchEnabled-Flag für eine Kollektion angeben, sehen Sie eine Suchleiste oben in der Kollektionsansicht.

OptionKostenEinrichtungAm besten für
Typesense-Erweiterung (Empfohlen)~7-14$/Monat pauschal5 MinDie meisten Projekte
AlgoliaPro-Abfrage-Preisgestaltung15 MinEnterprise, Geo-Suche
Lokale TextsucheKostenlos1 MinKleine Kollektionen (<1000 Docs)

Die FireCMS Typesense-Erweiterung stellt einen Typesense-Suchserver auf einer Compute Engine VM bereit und synchronisiert Ihre Firestore-Daten automatisch.

  • 🔍 Tippfehlertolerante Suche — „headphnes” findet „headphones”
  • Antworten unter einer Millisekunde
  • 💰 Pauschalmonatliche Kosten — Keine Pro-Abfrage-Gebühren
  • 🔄 Echtzeit-Synchronisation — Dokumente werden bei Erstellen/Aktualisieren/Löschen automatisch indiziert

Voraussetzungen:

  • Firebase-Projekt mit Firestore
  • GCP-Abrechnung aktiviert
  • gcloud CLI installiert

Schritt 1: Erweiterung installieren

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

Schritt 2: Berechtigungen gewähren

export PROJECT_ID=your-project-id
export EXT_INSTANCE_ID=typesense-search # Standardname der Erweiterung
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

Schritt 3: Suchserver bereitstellen

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

Ersetzen Sie REGION durch Ihre Funktionsregion (z.B. us-central1) und PROJECT_ID durch Ihr Projekt.

Warten Sie ~2 Minuten. Vorhandene Dokumente werden automatisch indiziert.

Schritt 4: (Optional) Öffentlichen Suchzugang aktivieren

gcloud functions add-iam-policy-binding ext-${EXT_INSTANCE_ID}-api \
--member="allUsers" \
--role="roles/cloudfunctions.invoker" \
--region=REGION \
--project=${PROJECT_ID}

Navigieren Sie zu Projekteinstellungen und konfigurieren Sie:

EinstellungWert
RegionRegion Ihrer Erweiterung (z.B. us-central1)
Erweiterungs-Instanz-IDStandard: typesense-search

Das war’s! FireCMS Cloud verbindet sich automatisch mit Ihrer Typesense-Instanz.

import { buildFireCMSSearchController, useFirestoreDelegate } from "@firecms/firebase";
const textSearchControllerBuilder = buildFireCMSSearchController({
region: "us-central1", // Region Ihrer Erweiterung
extensionInstanceId: "typesense-search" // Standardname
});
export function App() {
const firestoreDelegate = useFirestoreDelegate({
firebaseApp,
textSearchControllerBuilder
});
// ... Rest Ihrer App
}

Algolia ist ein verwalteter Suchdienst mit Pro-Abfrage-Preisgestaltung.

Wir bieten eine Hilfsmethode zum Durchführen von Suchen in Algolia: performAlgoliaTextSearch.

import { algoliasearch, SearchClient } from "algoliasearch";
import {
performAlgoliaTextSearch,
buildExternalSearchController,
FireCMSCloudApp,
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: algoliaSearchController
});
// ...
}

Seit FireCMS v3 bieten wir eine lokale Textsuche an. Dies ist nützlich für kleine Kollektionen oder wenn Sie eine schnelle Möglichkeit zum Durchsuchen Ihrer Daten bieten möchten.

Bei größeren Kollektionen sollten Sie einen externen Suchanbieter wie Algolia verwenden.

Für FireCMS Cloud müssen Sie sie einfach in der UI aktivieren.

Für Self-Hosted-Versionen können Sie sie aktivieren, indem Sie localTextSearchEnabled in useFirestoreDelegate setzen und jede Kollektion mit textSearchEnabled: true markieren.