Firebase SQL Connect oferece suporte à pesquisa de texto completo, com tecnologia do PostgreSQL. A pesquisa de texto completo permite localizar informações de maneira rápida e eficiente em grandes conjuntos de dados, pesquisando palavras-chave e frases em várias colunas ao mesmo tempo.
É possível adicionar a pesquisa de texto completo ao seu serviço. Primeiro, adicione a diretiva @searchable à String no esquema em que você quer pesquisar. Exemplo:
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
}
Depois de adicionar essa diretiva, você pode realizar a pesquisa de texto completo adicionando
o campo <pluralType>_search a uma consulta. Nesse caso, será movies_search:
query SearchMovies($query: String) @auth(level: PUBLIC) {
movies_search(query: $query) {
id
title
imageUrl
releaseYear
genre
rating
tags
description
}
}
Ajustar os resultados da pesquisa de texto completo
É possível ajustar os resultados da pesquisa de texto completo adicionando argumentos à diretiva @searchable e ao campo _search;
Argumentos compartilhados
É possível controlar os resultados da pesquisa com muitos dos mesmos argumentos usados para campos de lista básicos
<pluralType>:
orderpermite mudar a ordem dos resultados. Se omitido, os resultados serão ordenados por relevância decrescente.wherepermite adicionar filtros extras à pesquisa (por exemplo, pesquisar apenas filmes de um gênero específico).limitfaz com que a consulta retorne apenas os X principais resultados.offsetfaz com que a consulta pule os X primeiros resultados.distinctadiciona o operador DISTINCT ao SQL gerado.
Escolha do idioma
Por padrão, a pesquisa de texto completo analisa documentos em inglês. É possível mudar isso com o argumento de idioma na diretiva @searchable:
type Movie
@table {
title: String! @searchable(language: "french")
...
}
Especificar o idioma correto permite que o PostgreSQL execute o stemming lexical preciso e ajuda a garantir que a pesquisa não perca resultados relevantes. Se você estiver pesquisando em várias colunas, elas precisam estar definidas no mesmo idioma.
| Idiomas | ||
|---|---|---|
|
|
|
Usando psql, é possível acessar a lista completa com a consulta a seguir.
SELECT cfgname FROM pg_ts_config;
Formato da consulta
Por padrão, a pesquisa de texto completo usa semântica da Web para consultas (semelhante à Pesquisa Google). É possível mudar esse comportamento com o queryFormat argumento no
<pluralType>_search campo.
query SearchMovies($query: String) @auth(level: PUBLIC) {
movies_search(query: $query, queryFormat: PHRASE) {
...
}
}
Há quatro opções de formato de consulta:
- QUERY oferece semântica familiar aos mecanismos de pesquisa da Web (por exemplo, strings entre aspas, AND e OR). É o padrão.
- PLAIN corresponde a todas as palavras, mas não necessariamente juntas ("cachorro marrom" vai corresponder a "o cachorro marrom e branco" ou "o cachorro branco e marrom").
- PHRASE corresponde a uma frase exata ("cachorro marrom" vai corresponder a "o cachorro branco e marrom", mas não a "cachorro marrom e branco").
- ADVANCED permite criar consultas complexas usando o conjunto completo de operadores tsquery.
Limite de relevância
Definir um limite de relevância significa que a pesquisa só vai retornar resultados acima de um determinado valor de relevância. Em muitos casos, não é necessário definir isso. Qualquer resultado com relevância maior que 0 será relevante.
No entanto, se a pesquisa estiver retornando resultados que não parecem relevantes, o limite de relevância poderá filtrá-los.
Para descobrir um valor adequado para o limite de relevância, faça algumas pesquisas de teste e confira _metadata.relevance:
query SearchMovies($query: String) @auth(level: PUBLIC) {
movies_search(query: $query) {
id
title
_metadata {
relevance
}
...
}
}
Escolha um limite que omita os resultados que você considera irrelevantes. Para fazer isso, siga estas etapas:
query SearchMovies($query: String) @auth(level: PUBLIC) {
movies_search(query: $query, relevanceThreshold: 0.05) {
id
title
...
}
}
Escolher entre pesquisa de texto completo, pesquisa de similaridade vetorial e filtros de padrão de string
SQL Connect oferece algumas maneiras diferentes de pesquisar no seu banco de dados.
Use esta tabela para escolher a opção certa para seu caso de uso.
| Pesquisa de texto completo | Pesquisa de similaridade vetorial | Filtros de padrão de string |
|---|---|---|
| Bom para implementar a funcionalidade de pesquisa geral | Bom para encontrar linhas semanticamente semelhantes (por exemplo, recomendações ou 'Mais como este') | Bom para correspondências de texto exatas ou pesquisas de expressões regulares |
| Realiza o stemming lexical, que ajuda a corresponder diferentes formas ou tempos da mesma palavra | Requer a Vertex AI | Usa menos memória e espaço em disco, já que não requer nenhum índice ou colunas geradas |
| Pode ser realizado em várias colunas de uma tabela | Funciona apenas para uma única coluna por vez | Pode ser realizado em várias colunas de uma tabela usando filtros OR |
| Bom desempenho em documentos maiores | Bom desempenho em documentos grandes | Menos desempenho ao pesquisar documentos maiores |
| Adiciona sobrecarga de memória e armazenamento para armazenar uma coluna gerada e um índice para cada pesquisa |