Firebase SQL Connect unterstützt die Volltextsuche mit PostgreSQL. Mit der Volltextsuche können Sie schnell und effizient Informationen in großen Datasets finden, indem Sie gleichzeitig in mehreren Spalten nach Keywords und Wortgruppen suchen.
Sie können Ihrem Dienst die Volltextsuche hinzufügen. Fügen Sie zuerst die Direktive @searchable dem String in Ihrem Schema hinzu, in dem Sie suchen möchten. Beispiel:
type Movie
@table {
# The fields you want to search over
title: String! @searchable
genre: String @searchable
description: String @searchable
tags: [String]
# Some other fields that we won't search over
rating: Float
imageUrl: String!
releaseYear: Int
}
Nachdem Sie diese Direktive hinzugefügt haben, können Sie die Volltextsuche ausführen, indem Sie einer Abfrage das Feld <pluralType>_search hinzufügen. In diesem Fall ist es movies_search:
query SearchMovies($query: String) @auth(level: PUBLIC) {
movies_search(query: $query) {
id
title
imageUrl
releaseYear
genre
rating
tags
description
}
}
Ergebnisse der Volltextsuche optimieren
Sie können die Ergebnisse der Volltextsuche optimieren, indem Sie der Direktive @searchable und dem Feld _search Argumente hinzufügen.
Gemeinsame Argumente
Sie können die Suchergebnisse mit vielen der gleichen Argumente steuern, die für grundlegende
Listenfelder <pluralType> verwendet werden:
- Mit
orderkönnen Sie die Reihenfolge der Ergebnisse ändern. Wenn Sie dieses Argument weglassen, werden die Ergebnisse nach absteigender Relevanz sortiert. wherekönnen Sie der Suche zusätzliche Filter hinzufügen, z.B. nur nach Filmen eines bestimmten Genres suchen.- Mit
limitgibt die Abfrage nur die ersten X Ergebnisse zurück. - Mit
offsetwerden die ersten X Ergebnisse übersprungen. - Mit
distinctwird der Operator DISTINCT zum generierten SQL-Code hinzugefügt.
Sprachauswahl
Standardmäßig werden Dokumente bei der Volltextsuche auf Englisch analysiert. Sie können dies mit dem Argument `language` in der Direktive @searchable ändern:
type Movie
@table {
title: String! @searchable(language: "french")
...
}
Wenn Sie die richtige Sprache angeben, kann PostgreSQL eine genaue lexikalische Stemming-Analyse durchführen und sicherstellen, dass bei der Suche keine relevanten Ergebnisse übersehen werden. Wenn Sie in mehreren Spalten suchen, muss für alle Spalten dieselbe Sprache festgelegt sein.
| Sprachen | ||
|---|---|---|
|
|
|
Wir unterstützen alle Sprachen, die von der PostgreSQL-Volltextsuche unterstützt werden. Mit psql können Sie die vollständige Liste mit der folgenden Abfrage abrufen.
SELECT cfgname FROM pg_ts_config;
Abfrageformat
Standardmäßig verwendet die Volltextsuche Websyntax für Abfragen (ähnlich der Google Suche). Sie können dieses Verhalten mit dem queryFormat Argument im
<pluralType>_search Feld ändern.
query SearchMovies($query: String) @auth(level: PUBLIC) {
movies_search(query: $query, queryFormat: PHRASE) {
...
}
}
Es gibt vier Optionen für das Abfrageformat:
- QUERY bietet eine ähnliche Semantik wie bei Websuchmaschinen (z.B. in Anführungszeichen gesetzte Strings, AND und OR). Dies ist die Standardeinstellung.
- PLAIN findet alle Wörter, aber nicht unbedingt zusammen („brauner Hund“ findet „der braune und weiße Hund“ oder „der weiße und braune Hund“).
- PHRASE findet eine exakte Wortgruppe („brauner Hund“ findet „der weiße und braune Hund“, aber nicht „brauner und weißer Hund“).
- ADVANCED ermöglicht die Erstellung komplexer Abfragen mit allen tsquery-Operatoren.
Relevanzschwelle
Wenn Sie eine Relevanzschwelle festlegen, werden bei der Suche nur Ergebnisse mit einem Relevanzwert über dieser Schwelle zurückgegeben. In vielen Fällen müssen Sie diese Schwelle nicht festlegen. Jedes Ergebnis mit einer Relevanz über 0 ist ein relevantes Ergebnis.
Wenn bei der Suche jedoch Ergebnisse zurückgegeben werden, die nicht relevant sind, können Sie diese mit der Relevanzschwelle herausfiltern.
Um einen geeigneten Wert für die Relevanzschwelle zu ermitteln, sollten Sie einige Testsuchen durchführen und sich _metadata.relevance ansehen:
query SearchMovies($query: String) @auth(level: PUBLIC) {
movies_search(query: $query) {
id
title
_metadata {
relevance
}
...
}
}
Wählen Sie eine Schwelle aus, bei der Ergebnisse, die Sie für irrelevant halten, ausgeschlossen werden. Anleitung:
query SearchMovies($query: String) @auth(level: PUBLIC) {
movies_search(query: $query, relevanceThreshold: 0.05) {
id
title
...
}
}
Zwischen Volltextsuche, Vektorähnlichkeitssuche und Filtern nach Stringmustern wählen
SQL Connect bietet verschiedene Möglichkeiten, in Ihrer Datenbank zu suchen.
Anhand dieser Tabelle können Sie die richtige Option für Ihren Anwendungsfall auswählen.
| Volltextsuche | Vektorähnlichkeitssuche | Filter nach Stringmustern |
|---|---|---|
| Gut für die Implementierung allgemeiner Suchfunktionen | Gut zum Finden semantisch ähnlicher Zeilen (z. B. Empfehlungen oder „Ähnliche Artikel“) | Gut für exakte Textübereinstimmungen oder Suchen mit regulären Ausdrücken |
| Führt eine lexikalische Stemming-Analyse durch, mit der verschiedene Formen oder Zeitformen desselben Wortes gefunden werden können | Erfordert Vertex AI | Verwendet am wenigsten Arbeitsspeicher und Festplattenspeicher, da keine Indexe oder generierten Spalten erforderlich sind |
| Kann in mehreren Spalten einer Tabelle durchgeführt werden | Funktioniert nur für eine Spalte gleichzeitig | Kann in mehreren Spalten einer Tabelle durchgeführt werden, indem OR Filter verwendet werden |
| Leistungsstark bei größeren Dokumenten | Leistungsstark bei großen Dokumenten | Weniger leistungsstark bei der Suche in größeren Dokumenten |
| Führt zu einem höheren Arbeitsspeicher- und Speicherplatzverbrauch, da für jede Suche eine generierte Spalte und ein Index gespeichert werden müssen |