Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Implementando a pesquisa de texto completo no SQL Server 2016 para usuários avançados


Este artigo fala sobre métodos avançados de uso de pesquisa de texto completo para profissionais de dados. Ele permite uma melhor experiência de pesquisa em sua análise de banco de dados do dia-a-dia.

Além disso, os leitores vão além do conhecimento básico da Pesquisa de Texto Completo e sua implementação. Você verá a importância da metodologia de pesquisa avançada usando a pesquisa de texto completo para obter resultados rápidos e confiáveis.

Pré-requisitos


Primeiro, vamos passar pelos pré-requisitos, pois o artigo é focado em usos avançados da pesquisa de texto completo.

Conhecimento de T-SQL


O artigo pressupõe que, para implementar as orientações, os leitores estejam familiarizados com a escrita e execução de scripts T-SQL em bancos de dados com um conhecimento básico do SQL Server.

Noções básicas de pesquisa de texto completo


Este artigo também espera que os leitores tenham uma compreensão básica da pesquisa de texto completo.

Consulte Implementando a pesquisa de texto completo no SQL Server 2016 para iniciantes artigo se você quiser se familiarizar com os conceitos básicos e a implementação da Pesquisa de Texto Completo por meio de orientações.

Instalação de pesquisa de texto completo


Vamos supor que a pesquisa de texto completo já tenha sido adicionada à sua instância SQL.

Se você ainda não fez isso, siga as instruções em Implementing Full-Text Search in SQL Server 2016 for Beginners artigo para ajudá-lo a instalar a pesquisa de texto completo em sua instância SQL.

Você pode verificar o status da pesquisa de texto completo executando o seguinte script:
-- A pesquisa de texto completo está instalada, então 1 ou 0SELECT fulltextserviceproperty('IsFulltextInstalled') como [Pesquisa de texto completo]


Banco de dados de amostra SQLDevBlogV7


Agora crie e preencha um banco de dados de amostra chamado SQLDevBlogV7 tendo Notas coluna de VARCHAR(MAX) tipo. Para fazer isso, execute o seguinte script T-SQL no banco de dados mestre:
-- Criar banco de dados de exemplo (SQLDevBlogV7)CREATE DATABASE SQLDevBlogV7;GOUSE SQLDevBlogV7;-- (1) Criar tabela de artigos no banco de dados de exemploCREATE TABLE [dbo].[Artigo] ([ArticleId] INT IDENTITY (1, 1) NOT NULL,[Categoria] VARCHAR (50) NULL,[Autor] VARCHAR (50) NULL,[Título] VARCHAR (150) NULL,[Publicado] DATETIME2 (7) NULL,[Notas] VARCHAR (MAX) NULL,CONSTRAINT [PK_Article ] PRIMARY KEY (ArticleId));GO-- Redefinir dados tabularesTRUNCATE TABLE dbo.ArticleGO-- Adicionar dados à tabelaSET IDENTITY_INSERT [dbo].[Artigo] ONINSERT INTO [dbo].[Artigo] ([ArticleId], [Category] , [Autor], [Título], [Publicado], [Notas]) VALORES (1, N'Desenvolvimento', N'Atif', N'Introdução à Programação T-SQL ', N'2017-01-01 00:00:00', N'O artigo é sobre programação T-SQL cobrindo as instruções mais usadas, incluindo SELECT.')INSERT INTO [dbo].[Artigo] ([ArticleId], [Category], [Author], [Title] , [Publicado], [Notas]) VALUES (2, N'Testing', N'Peter', N'Database Unit Testing Fundamentals', N'2017-01-10 00:00:00', N'Este é um artigo de teste de unidade de banco de dados para se familiarizar com o teste de unidade com a ajuda de exemplos e orientações.')INSERT INTO [dbo].[Artigo] ([ArtigoId], [Categoria], [Autor], [Título] , [Published], [Notes]) VALUES (3, N'Data Analysis', N'Haroon', N'Learn Basic Data Analysis with SQL Window Functions', N'2019-06-12 00:00:00', N'Este artigo é sobre funções de janela T-SQL (Transact-SQL) e seu uso básico em tarefas diárias de análise de dados.')INSERT INTO [dbo].[Artigo] ([ArticleId], [Category], [Autor], [Título], [Publicado], [Notas]) VALUES (4, N'Desenvolvimento', N'Peter', N'Common Table Expressions (CTE)', N'2017-02-10 00:00 :00', N'Este é um artigo que explica como usar CTE em T-SQL para escrever consultas complexas.')INSERT INTO [dbo].[Artigo] ([ArticleId], [Category], [Author], [ Título], [Publicado], [Notas]) VALORES (5, N'Testing', N'Sadaf', N'Manual Testing vs. Automated Testing', N'2017-03-20 00:00:00', N 'Este artigo é baseado na análise comparativa entre testes manuais e testes automatizados. Este artigo usa tSQLt para dar exemplos de testes automatizados.')INSERT INTO [dbo].[Artigo] ([ArticleId], [Category], [Author], [Title], [Published], [Notes]) VALUES (6 , N'Testing', N'Atif', N'Beyond Database Unit Testing', N'2017-11-10 00:00:00', N'Há muito o que fazer quando se trata de testes de unidade de banco de dados e este artigo é mais sobre alguns métodos de nível avançado para escrever e executar testes de unidade SQL usando tSQLt.')INSERT INTO [dbo].[Artigo] ([ArticleId], [Category], [Author], [Title], [Published ], [Notas]) VALUES (7, N'Testing', N'Sadaf', N'Cross Database Unit Testing', N'2017-12-20 00:00:00', N'Este artigo aborda um cenário complexo de teste de unidade de banco de dados cruzado usando ferramentas de teste de terceiros.')INSERT INTO [dbo].[Artigo] ([ArticleId], [Categoria], [Autor], [Título], [Publicado], [Notas]) VALUES (8 , N'Development', N'Haroon', N'Como Usar Corretamente a Função IsNumeric T-SQL', N'2018-01-10 00:00:00', N'Trata-se da função IsNumeric que determina se um expressão pode b e avaliado como um número. Aqui, a expressão pode consistir em símbolos e operadores que são avaliados como um único valor de dados pelo SQL Server Database Engine.')INSERT INTO [dbo].[Artigo] ([ArticleId], [Category], [Author], [Title] ], [Publicado], [Notas]) VALUES (9, N'Testing', N'Sadaf', N'Scripting and Testing Database for iniciantes ', N'2018-02-15 00:00:00', N' Este artigo é baseado em scripts e testes de bancos de dados SQL usando ferramentas e tecnologias modernas.')INSERT INTO [dbo].[Artigo] ([ArticleId], [Category], [Author], [Title], [Published], [Notas]) VALUES (10, N'Development', N'Atif', N'Advanced Database Development Methods', N'2018-07-10 00:00:00', N'Este artigo fala sobre ferramentas modernas de desenvolvimento de banco de dados incluindo SSDT, SSMS etc.')INSERT INTO [dbo].[Artigo] ([ArticleId], [Categoria], [Autor], [Título], [Publicado], [Notas]) VALUES (11, N'Testing' , N'Sadaf', N'Como escrever testes de unidade para seu banco de dados', N'2018-11-10 00:00:00', N'Este artigo é sobre como escrever testes de unidade para seu banco de dados usando MST est.')INSERT INTO [dbo].[Artigo] ([ArticleId], [Categoria], [Autor], [Título], [Publicado], [Notas]) VALORES (12, N'Desenvolvimento', N'Peter ', N'Database Development using Modern Tools', N'2018-12-10 00:00:00', N'Neste artigo, um cenário de desenvolvimento de banco de dados é discutido usando SQL Server Data Tools e SQL Server Management Studio. ')INSERT INTO [dbo].[Artigo] ([ArticleId], [Categoria], [Autor], [Título], [Publicado], [Notas]) VALORES (13, N'DLM', N'Atif', N'Designing, Developing and Deploying Database', N'2019-01-01 00:00:00', N'Os conceitos em torno do Azure DevOps e sua implementação são o foco principal deste artigo.')INSERT INTO [dbo]. [Artigo] ([ArticleId], [Category], [Author], [Title], [Published], [Notes]) VALUES (14, N'DLM', N'Peter', N'How to Apply Database Lifecycle Management ', N'2019-02-10 00:00:00', N'Este artigo é sobre DLM.')INSERT INTO [dbo].[Artigo] ([ArticleId], [Categoria], [Autor], [Título] ], [Publicado], [Notas]) VALUES (15, N'Testing', N'Saqib', N'SQL Unit Testing Stored Procedures', N'2019-03-10 00:00:00', N'This artigo fala sobre como escrever testes de unidade para um procedimento.')INSERT INTO [dbo].[Artigo] ([ArticleId], [Category], [Author], [Title], [Published], [Notes]) VALUES ( 16, N'Reporting', N'Haroon', N'SSRS Reports Development in Simple Terms', N'2019-07-10 22:26:42', N'O artigo é dedicado aos fundamentos do desenvolvimento do SQL Server Reporting Services (SSRS) e voltado para iniciantes e profissionais interessados ​​em desenvolvimento de banco de dados.')SET IDENTITY_INSERT [dbo].[Artigo] OFF

Criar Catálogo de Texto Completo


Crie um Catálogo de Texto Completo usando o script abaixo ou usando o assistente de configuração:
-- Criar Catálogo de Texto CompletoCRIAR CATÁLOGO DE TEXTO COMPLETO ArticleCatalog AS DEFAULT;GO

Definir índice de texto completo nas notas


Assim que o catálogo for criado com sucesso, defina um Índice de Texto Completo com base nas Notas coluna da seguinte forma (ou usando o assistente de configuração):
-- Definir índice de texto completoCREATE FULLTEXT INDEX ON dbo.Article(Notes)KEY INDEX PK_ArticleWITH STOPLIST =SYSTEM;GO

Catálogo de texto completo e verificação de índice de texto completo


Expanda os nós relacionados para ver o Índice de Texto Completo e o Catálogo de Texto Completo que você acabou de criar:



Agora você está pronto para executar consultas de texto completo na tabela de interesse - no nosso caso, é Artigo .

Termo Simples


Pesquisar uma palavra ou frase é mais fácil do que pesquisar outras formas, por isso também é conhecido como um termo simples.

Consulte Implementando a pesquisa de texto completo no SQL Server 2016 para iniciantes artigo para implementar uma forma básica de uma consulta de texto completo para pesquisar uma palavra ou frase.

Agora vamos discutir algumas das possíveis pesquisas avançadas feitas usando a pesquisa de texto completo.

Pesquisa de texto completo avançada usando termo de prefixo


Um termo de prefixo refere-se a uma palavra prefixada que começa com algumas letras – pode ser qualquer coisa que corresponda a esse padrão. Você pode pensar nisso como uma versão de pesquisa de texto completo de LIKE com palavra prefixada*.

Uma palavra ou palavras dentro de uma frase também podem ter termo(s) de prefixo.

Exemplo


Por exemplo, pesquisando a palavra dados* pode nos obter qualquer coisa começando com dados nessa coluna, como dados, banco de dados, bancos de dados etc.

Pesquisa de artigos relacionados ao desenvolvedor usando termo de prefixo


Vamos imaginar que você tenha a tarefa de pesquisar artigos relacionados ao desenvolvimento para organizá-los em um grupo de desenvolvimento separado para uma melhor experiência de visualização do site.

A solução é 'pesquisa de termo de prefixo' usando uma consulta de texto completo da seguinte forma:
--Implementando Termo de Prefixo em Texto Completo Pesquise para encontrar artigos relacionados ao desenvolvimentoSELECT Title,Notes FROM dbo.Article WHERE CONTAINS(NOTES,'"dev*"')



Os resultados também mostraram o artigo sobre DevOps – não é relacionado ao desenvolvimento, é por isso que executamos outro script. Ele encontrará todos os artigos relacionados ao desenvolvimento mais rapidamente usando uma consulta de texto completo, excluindo o DevOps da seguinte forma:
--Implementando Termo de Prefixo Texto Completo Busca para encontrar artigos relacionados a dev, mas não DevOpsSELECT Title,Notes FROM dbo.Article WHERE CONTAINS(NOTES,'"dev*"') AND NOT CONTAINS(Notes,'DevOps') 
A saída é a seguinte:



Observe também que é essencial colocar a palavra de pesquisa entre aspas duplas, conforme mostrado nos scripts acima. Ao fazer isso, implementamos a pesquisa de termo de prefixo corretamente.

Pesquisa avançada de texto completo usando forma flexional


Às vezes, você precisa procurar formas flexionais de uma palavra que signifique possíveis formas que uma palavra pode assumir.

Exemplo


Um exemplo simples é a palavra “Deploy” que pode ter as seguintes formas flexionais:
  1. Implantações
  2. Implantado
  3. Implantação
  4. Implantações
  5. Implantando

Formas flexionais de pesquisa escrita


Vamos ver o que acontece se executarmos uma consulta de Texto Completo para encontrar Notas para todas as formas flexionais da palavra escrever:
-- Pesquisando formas flexionais de escrita de palavras usando Pesquisa de Texto CompletoSELECT Title,Notes FROM dbo.Article WHERE CONTAINS(NOTES,'FORMSOF(INFLECTIONAL,write)')



A coluna Notas com linhas contendo escrever e escrevendo são mostrados onde escrevendo é uma forma flexional de escrever .

Formas flexionais de pesquisa de tecnologia


Se você tiver a tarefa de encontrar todos os artigos que contenham diferentes formas da palavra tecnologia, implemente uma forma flexional da pesquisa de palavras usando o seguinte script T-SQL:
-- Pesquisando formas flexionais de tecnologia de palavras usando pesquisa de texto completoSELECT Title,Notes FROM dbo.Article WHERE CONTAINS(NOTES,'FORMSOF(INFLECTIONAL,technology)')

A saída é a seguinte:


Sem pesquisa de unidade de termo de prefixo


Vamos agora construir uma consulta de texto completo mais complexa. Ele pesquisará todos os artigos para encontrar uma forma flexional da palavra teste mas sem termo de prefixo unidade (excluindo testes unitários), pois estamos procurando os artigos sobre testes, não sobre testes unitários:
-- Pesquisando formas flexionais de teste de palavras excluindo o termo de prefixo de unidade usando pesquisa de texto completoSELECT Title,Notes FROM dbo.Article WHERE CONTAINS(NOTES,'FORMSOF(INFLECTIONAL,test)') AND NOT CONTAINS(NOTES,'"unit *"')

Como resultado, veremos apenas registros onde manual , automatizado, ou apenas testando palavras são mencionadas excluindo teste unitário artigos.


Pesquisa avançada de texto completo usando a pesquisa de proximidade


Vamos usar nossa experiência prática de usar a pesquisa de proximidade executando uma consulta de texto completo.

Pesquisa/prazo de proximidade


Essa forma de pesquisa de texto completo permite pesquisar palavras ou frases próximas umas das outras. É muito útil encontrar registros quando algumas palavras ou frases estão localizadas muito apertadas.

Exemplo


Um bom exemplo de pesquisa de proximidade é pesquisar registros onde a palavra futebol está perto da palavra chão para obter informações apenas sobre campos de futebol.

Pesquise por "testes próximos avançados" usando o termo de proximidade


Se você deseja pesquisar todos os artigos em que o teste avançado é mencionado sem seguir nenhuma ordem específica, sua melhor opção é usar a pesquisa de proximidade, pois a pesquisa de texto completo está configurada na coluna desejada.

Escreva o seguinte script para pesquisar a palavra avançado perto da palavra testes em qualquer ordem na coluna Notas:
-- Pesquisa de palavra avançada perto de teste de palavra usando pesquisa de proximidade (Pesquisa de texto completo)SELECT NOTES FROM dbo.Article ONDE CONTEM (NOTAS,'NEAR(avançado,teste)')

Os resultados são os seguintes:



Os resultados nos mostraram as notas onde o teste é mencionado por métodos de nível avançado e é isso que estávamos procurando. Também podemos especificar a distância entre duas palavras.

Pesquisar com no máximo 2 palavras separadas


Por fim, execute uma consulta de texto completo usando o termo de proximidade para descobrir todos os cenários de banco de dados em que a palavra banco de dados está perto da palavra cenário mas não mais de 2 palavras de distância.
-- Procure por banco de dados de palavras próximo ao cenário de palavras com no máximo 2 palavras de distância usando pesquisa de proximidade (Pesquisa de Texto Completo)SELECT NOTES FROM dbo.Article WHERE CONTAINS (NOTES,'NEAR((banco de dados,cenário),2,TRUE )')

A saída é a seguinte:



Como resultado, o artigo onde cenário de desenvolvimento de banco de dados é mencionado foi mostrado com sucesso.

Com isso, você aprendeu com sucesso a escrever consultas de texto completo avançadas em qualquer coluna. Isso ajuda você a atender a requisitos de pesquisa sofisticados para estar pronto para executar a pesquisa de texto completo em seus cenários de vida profissional, sempre que aplicável.

O que fazer


Agora que você pode escrever consultas de texto completo avançadas, tente estas coisas para melhorar suas habilidades:
  1. Tente pesquisar todos os artigos onde a palavra prefixada auto é usado.
  2. Tendo em mente este artigo, tente escrever um script para fazer uma pesquisa de proximidade para encontrar todas as linhas onde a palavra moderno está perto da palavra ferramentas .
  3. Tente encontrar todas as formas flexionais da palavra escreveu .