Firebase SQL Connect supporta la ricerca a testo intero, basata su PostgreSQL. La ricerca a testo intero ti consente di individuare in modo rapido ed efficiente le informazioni all'interno di set di dati di grandi dimensioni cercando parole chiave e frasi in più colonne contemporaneamente.
Puoi aggiungere la ricerca a testo intero al tuo servizio. Innanzitutto, aggiungi la direttiva @searchable alla String nello schema su cui vuoi eseguire la ricerca. Ad esempio:
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
}
Dopo aver aggiunto questa direttiva, puoi eseguire la ricerca a testo intero aggiungendo
il campo <pluralType>_search a una query. In questo caso, sarà movies_search:
query SearchMovies($query: String) @auth(level: PUBLIC) {
movies_search(query: $query) {
id
title
imageUrl
releaseYear
genre
rating
tags
description
}
}
Ottimizzare i risultati della ricerca a testo intero
Puoi ottimizzare i risultati della ricerca a testo intero aggiungendo argomenti alla direttiva @searchable e al campo _search.
Argomenti condivisi
Puoi controllare i risultati di ricerca con molti degli stessi argomenti utilizzati per i campi di elenco di base
<pluralType>:
orderti consente di modificare l'ordine dei risultati. Se omesso, i risultati verranno ordinati in base alla pertinenza in ordine decrescente.whereti consente di aggiungere filtri aggiuntivi alla ricerca (ad es. cercare solo film di un genere specifico).limitfa in modo che la query restituisca solo i primi X risultati.offsetfa in modo che la query salti i primi X risultati.distinctaggiunge l'operatore DISTINCT all'SQL generato.
Scelta della lingua
Per impostazione predefinita, la ricerca a testo intero analizza i documenti in inglese. Puoi modificare questa impostazione con l'argomento `language` nella direttiva @searchable:
type Movie
@table {
title: String! @searchable(language: "french")
...
}
Se specifichi la lingua corretta, PostgreSQL eseguirà uno stemming lessicale accurato e ti aiuterà ad assicurarti che la ricerca non perda risultati pertinenti. Se esegui la ricerca in più colonne, tutte devono essere impostate sulla stessa lingua.
| Lingue | ||
|---|---|---|
|
|
|
Supportiamo tutte le lingue supportate dalla ricerca a testo intero di PostgreSQL. Utilizzando psql, puoi ottenere l'elenco completo con la query seguente.
SELECT cfgname FROM pg_ts_config;
Formato della query
Per impostazione predefinita, la ricerca a testo intero utilizza la semantica web per le query (simile alla Ricerca Google). Puoi modificare questo comportamento con l'queryFormat argomento nel
<pluralType>_search campo.
query SearchMovies($query: String) @auth(level: PUBLIC) {
movies_search(query: $query, queryFormat: PHRASE) {
...
}
}
Esistono quattro opzioni per il formato della query:
- QUERY fornisce una semantica familiare ai motori di ricerca web (ad es. stringhe tra virgolette, AND e OR). È l'impostazione predefinita.
- PLAIN corrisponde a tutte le parole, ma non necessariamente insieme ("cane marrone" corrisponderà a "il cane marrone e bianco" o "il cane bianco e marrone").
- PHRASE corrisponde a una frase esatta ("cane marrone" corrisponderà a "il cane bianco e marrone", ma non a "cane marrone e bianco").
- AVANZATE ti consente di creare query complesse utilizzando l'insieme completo di operatori tsquery.
Soglia di pertinenza
L'impostazione di una soglia di pertinenza significa che la ricerca restituirà solo i risultati superiori a un determinato valore di pertinenza. In molti casi, non sarà necessario impostare questa soglia: qualsiasi risultato con una pertinenza maggiore di 0 sarà un risultato pertinente.
Tuttavia, se ritieni che la ricerca restituisca risultati non pertinenti, la soglia di pertinenza può filtrarli.
Per determinare un valore appropriato per la soglia di pertinenza, esegui alcune ricerche di test ed esamina _metadata.relevance:
query SearchMovies($query: String) @auth(level: PUBLIC) {
movies_search(query: $query) {
id
title
_metadata {
relevance
}
...
}
}
Scegli una soglia che ometta i risultati che ritieni non pertinenti. Ecco come fare:
query SearchMovies($query: String) @auth(level: PUBLIC) {
movies_search(query: $query, relevanceThreshold: 0.05) {
id
title
...
}
}
Scegliere tra ricerca a testo intero, ricerca di somiglianza vettoriale e filtri di pattern di stringhe
SQL Connect offre diversi modi per eseguire ricerche nel database.
Utilizza questa tabella per scegliere l'opzione giusta per il tuo caso d'uso.
| Ricerca a testo intero | Ricerca di somiglianza vettoriale | Filtri di pattern di stringhe |
|---|---|---|
| Ideale per implementare la funzionalità di ricerca generale | Ideale per trovare righe semanticamente simili (ad es. consigli o 'Altro simile') | Ideale per corrispondenze di testo esatte o ricerche con espressioni regolari |
| Esegue lo stemming lessicale, che aiuta a trovare corrispondenze tra forme o tempi diversi della stessa parola | Richiede Vertex AI | Utilizza meno memoria e spazio su disco, poiché non richiede alcun indici o colonne generate |
| Può essere eseguita su più colonne di una tabella | Funziona solo per una singola colonna alla volta | Può essere eseguita su più colonne di una tabella utilizzando i filtri OR |
| Ottime prestazioni con documenti più grandi | Ottime prestazioni con documenti di grandi dimensioni | Prestazioni inferiori durante la ricerca in documenti più grandi |
| Aggiunge un overhead di memoria e spazio di archiviazione per memorizzare una colonna generata e un indice per ogni ricerca |