Por padrão, as pesquisas no banco de dados PostgreSQL são exatas. O que isso significa é que, quando os usuários pesquisam 'x y z', o banco de dados PostGresql procura 'x y z' na ordem exata nos campos de uma determinada tabela. Se houver uma leve incompatibilidade, por exemplo, digamos que você tenha 'x y_z', o banco de dados não mostrará qualquer resultado.
Vejamos um cenário da vida real, então você ficará claro sobre o que é a pesquisa completa de texto e qual é a necessidade disso.
Digamos que você tenha uma loja de TI e o usuário pesquisado por 'desktop e laptop'. Não há problema lá. Mas você realmente tem algum produto que seja um desktop e um laptop? Você ainda tem um produto cujo título diz 'xxx desktop e laptop' exatamente como o usuário pesquisou? Provavelmente não! A pesquisa não faria em mostrar quaisquer resultados relevantes. O usuário provavelmente queria listar todos os computadores da sua loja que ele ou ela pode usar como desktop e um laptop, provavelmente um tablet conversível. Como a pesquisa não mostrou qualquer resultado para o usuário, o usuário pode pensar que você está sem estoque ou não o tem em sua loja de TI. Mas você tem muitos tablets conversíveis que podem ser usados como desktop e um laptop no banco de dados da sua loja. Se os usuários não conseguirem encontrá -lo, você não receberá vendas. Você deseja que seu site liste todos os computadores conversíveis que você tem em estoque quando os usuários fazem uma consulta de pesquisa como essa. É aqui que a pesquisa completa de texto entra em jogo. Onde uma pesquisa comum falha, a pesquisa de texto completo resgata.
Neste artigo, mostrarei como executar a pesquisa completa de texto com o PostGresql. Vamos começar.
Configurando o PostGresql para pesquisa completa de texto
Antes que você possa praticar a pesquisa completa de texto no PostGresql junto comigo, você deve configurar o PostgreSQL com alguns dados fictícios. Nesta seção, mostrarei como adicioná -los no PostgreSQL.
Primeiro, crie um novo banco de dados com o seguinte comando:
$ CREATEDB IT_STORENota: Aqui it_store é o nome do banco de dados.
Agora faça o login no shell pós -grausql do it_store Banco de dados que você criou com o seguinte comando:
$ psql it_storeVocê deve estar conectado ao PostgreSQL's it_store banco de dados como você pode ver na captura de tela abaixo.
Eu não vou exagerar aqui. Eu vou criar um simples produtos Tabela para o nosso banco de dados de armazenamento de TI. Os campos básicos que eu preciso são um ID do produto, Título do produto, Descrição do produto.
O código SQL para a tabela de produtos é apresentado abaixo:
Agora copie e cole o comando sql para criar o produtos tabe.
Depois de terminar, produtos Tabela deve ser criada.
Agora vou inserir alguns produtos no produtos mesa. Os comandos SQL são dados abaixo.
Os produtos são inseridos no produtos mesa.
Você pode executar o seguinte comando SQL para verificar que:
$ SELECT * FROM PRODUTOS;Como você pode ver, o produtos estão na tabela de produtos.
Pesquisa de texto completo com PostgreSQL
Na seção anterior, mostrei como adicionar dados dummy ao seu banco de dados PostGresql. Nesta seção, mostrarei como executar a pesquisa completa de texto nesses dados com o PostGresql.
No PostgreSQL, você usa duas funções para executar a pesquisa completa de texto. Eles são to_tsvector () e To_tsQuery (). Vamos ver como eles funcionam e usá -los primeiro.
Um rápido tour de to_tsvector () e To_tsQuery () Funções
to_tsvector () A função quebra a sequência de entrada e cria tokens dela, que é usada para executar a pesquisa completa de texto usando o To_tsQuery () função.
Agora para entender o que to_tsvector () A função faz em uma sequência de entrada, abra PostGresql Shell e execute o seguinte comando:
# Selecione TO_TSVECTOR ('I Love Linux. Linux é um ótimo sistema operacional.');Como você pode ver a saída do to_tsvector () função na seção marcada da captura de tela abaixo, o to_tsvector () A função interrompeu as palavras e atribuiu alguns números nelas.
Você pode usar To_tsQuery () função da seguinte forma:
# Selecione FieldNames no tableNameCondições de To_tsQuery () Função
O To_tsQuery () aceita condições que ele usa para comparar com a saída de to_tsvector () função.
Por exemplo, se você está procurando 'laptop e desktop', você deve colocar 'laptop e desktop' para To_tsQuery () função.
Para 'laptop ou desktop', a condição deve ser 'Laptop | Área de Trabalho'.
Agora vou entrar em nosso banco de dados de lojas de TI para mostrar alguns exemplos do mundo real.
Vamos procurar um dispositivo conversível que possa ser usado como desktop e laptop enquanto falei anteriormente.
Execute o seguinte comando SQL para fazer isso:
Como você pode ver, o computador correto foi encontrado.
Você pode virar os termos também. Por exemplo, você pode pesquisar por 'laptop e desktop'.
O resultado correto ainda é exibido.
Digamos que o usuário queira listar todos os computadores de desktop ou laptop em sua loja de TI. A consulta é 'desktop ou laptop' e a condição de To_tsQuery () função deve ser 'Desktop | computador portátil' ou 'Laptop | Área de Trabalho'.
O comando SQL é:
Como você pode ver, todos os computadores da loja de TI estão listados.
Vamos dar uma olhada em outro exemplo. O usuário está procurando todos os laptops da sua loja, mas não os conversíveis. A consulta do usuário pode ser 'não laptops conversíveis'. A condição de To_tsQuery () função pode ser '!conversível e laptops '
O comando SQL é:
Como você pode ver, o laptop correto é encontrado.
Você notou uma coisa? Eu coloco laptops no TO_TSQUERY() função, mas não há laptops palavra -chave na descrição do produto. Então, como o PostgreSql o encontrou? Bem, essa é a magia da pesquisa completa de texto. As palavras -chave não precisam ser exatas. PostgreSQL pode até lidar com algumas palavras plurais, tempos e muito mais.
Por padrão, a pesquisa de texto completa funciona apenas no idioma inglês. Mas o PostgreSQL fornece suporte para alguns outros idiomas também. Verifique a documentação do PostGresql para obter mais informações sobre isso.
É assim que você realiza pesquisa completa de texto no PostGresql. Obrigado por ler este artigo.