sql >> Base de Datos >  >> RDS >> Sqlserver

Implementación de búsqueda de texto completo en SQL Server 2016 para usuarios avanzados

Este artículo informa sobre métodos avanzados de uso de búsqueda de texto completo para profesionales de datos. Permite una mejor experiencia de búsqueda en el análisis diario de la base de datos.

Además, los lectores irán más allá del conocimiento básico de la búsqueda de texto completo y su implementación. Verá la importancia de la metodología de búsqueda avanzada utilizando la búsqueda de texto completo para obtener resultados rápidos y confiables.

Requisitos previos

Primero, repasemos los requisitos previos, ya que el artículo se centra en los usos avanzados de la búsqueda de texto completo.

Conocimiento de T-SQL

El artículo asume que para implementar los tutoriales, los lectores están familiarizados con la escritura y ejecución de scripts T-SQL en bases de datos con una comprensión básica de SQL Server.

Conceptos básicos de la búsqueda de texto completo

Este artículo también espera que los lectores tengan una comprensión básica de la búsqueda de texto completo.

Consulte Implementación de búsqueda de texto completo en SQL Server 2016 para principiantes artículo si desea familiarizarse con los conceptos básicos y la implementación de la búsqueda de texto completo a través de tutoriales.

Instalación de búsqueda de texto completo

Supongamos que la búsqueda de texto completo ya se ha agregado a su instancia de SQL.

Si aún no lo ha hecho, siga las instrucciones en Implementación de la búsqueda de texto completo en SQL Server 2016 para principiantes artículo para ayudarlo a instalar la búsqueda de texto completo en su instancia de SQL.

Puede comprobar el estado de la búsqueda de texto completo ejecutando el siguiente script:

-- Is Full-Text Search installed then 1 or 0
SELECT fulltextserviceproperty('IsFulltextInstalled') as [Full-Text Search]

Base de datos de muestra SQLDevBlogV7

Ahora cree y complete una base de datos de muestra llamada SQLDevBlogV7 tener notas columna de VARCHAR(MAX) tipo. Para hacerlo, ejecute el siguiente script T-SQL en la base de datos maestra:

-- Create sample database (SQLDevBlogV7)
CREATE DATABASE SQLDevBlogV7;
GO


USE SQLDevBlogV7;


-- (1) Create Article table in the sample database
CREATE TABLE [dbo].[Article] (
[ArticleId] INT IDENTITY (1, 1) NOT NULL,
[Category] VARCHAR (50) NULL,
[Author] VARCHAR (50) NULL,
[Title] VARCHAR (150) NULL,
[Published] DATETIME2 (7) NULL,
[Notes] VARCHAR (MAX) NULL,
CONSTRAINT [PK_Article] PRIMARY KEY (ArticleId)

);

GO

-- Reset tabular data
TRUNCATE TABLE dbo.Article
GO

-- Add data to the table
SET IDENTITY_INSERT [dbo].[Article] ON

INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title], [Published], [Notes]) VALUES (1, N'Development', N'Atif', N'Introduction to T-SQL Programming ', N'2017-01-01 00:00:00', N'The article is about T-SQL programming covering most commonly used statements including SELECT.')

INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title], [Published], [Notes]) VALUES (2, N'Testing', N'Peter', N'Database Unit Testing Fundamentals', N'2017-01-10 00:00:00', N'This is a database unit testing article to get familiar with unit testing with the help of examples and walkthroughs.')

INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title], [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'This article is about T-SQL (Transact-SQL) Window functions and their basic use in day-to-day data analysis tasks.')

INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title], [Published], [Notes]) VALUES (4, N'Development', N'Peter', N'Common Table Expressions (CTE)', N'2017-02-10 00:00:00', N'This is an article which explains how to use CTE in T-SQL to write complex queries.')

INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title], [Published], [Notes]) VALUES (5, N'Testing', N'Sadaf', N'Manual Testing vs. Automated Testing', N'2017-03-20 00:00:00', N'This article is based on the comparative anlaysis between manual testing and automated testing. This article uses tSQLt to give examples of automated testing.')

INSERT INTO [dbo].[Article] ([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'There is a lot to do when it comes to the database unit testing and this article is more about the some advanced level methods to write and run SQL unit tests using tSQLt.')

INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title], [Published], [Notes]) VALUES (7, N'Testing', N'Sadaf', N'Cross Database Unit Testing', N'2017-12-20 00:00:00', N'This article covers a complex scenario of cross database unit testing using 3rd party testing tools.')

INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title], [Published], [Notes]) VALUES (8, N'Development', N'Haroon', N'How to Properly Use the T-SQL IsNumeric Function', N'2018-01-10 00:00:00', N'This is about IsNumeric function which determines whether an expression can be evaluated as a number. Here, the expression can consist of symbols and operators which are evaluated as a single data value by SQL Server Database Engine.')

INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title], [Published], [Notes]) VALUES (9, N'Testing', N'Sadaf', N'Scripting and Testing Database for beginners ', N'2018-02-15 00:00:00', N'This article is based on the scripting and testing of SQL databases using modern tools and technologies.')

INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title], [Published], [Notes]) VALUES (10, N'Development', N'Atif', N'Advanced Database Development Methods', N'2018-07-10 00:00:00', N'This article talks about modern database development tools including SSDT, SSMS etc.')

INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title], [Published], [Notes]) VALUES (11, N'Testing', N'Sadaf', N'How to Write Unit Tests for your Database', N'2018-11-10 00:00:00', N'This article is about writing unit testing for your database using MSTest.')

INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title], [Published], [Notes]) VALUES (12, N'Development', N'Peter', N'Database Development using Modern Tools', N'2018-12-10 00:00:00', N'In this aritlce a database development scenario is dicussed using SQL Server Data Tools and SQL Server Management Studio. ')

INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title], [Published], [Notes]) VALUES (13, N'DLM', N'Atif', N'Designing, Developing and Deploying Database', N'2019-01-01 00:00:00', N'The concepts around Azure DevOps and their implementation is the main focus of this article.')

INSERT INTO [dbo].[Article] ([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'This article is about DLM.')

INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title], [Published], [Notes]) VALUES (15, N'Testing', N'Saqib', N'SQL Unit Testing Stored Procedures', N'2019-03-10 00:00:00', N'This article talks about how to write unit tests for a procedure.')

INSERT INTO [dbo].[Article] ([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'The article is dedicated to the fundamentals of SQL Server Reporting Services (SSRS) development and aimed at beginners and professionals interested in database development.')

SET IDENTITY_INSERT [dbo].[Article] OFF

Crear catálogo de texto completo

Cree un catálogo de texto completo con el siguiente script o con el asistente de configuración:

-- Create Full-Text Catalog
CREATE FULLTEXT CATALOG ArticleCatalog AS DEFAULT;
GO

Definir índice de texto completo en notas

Una vez que el catálogo se haya creado correctamente, defina un índice de texto completo basado en las notas columna de la siguiente manera (o usando el asistente de configuración):

-- Define Full-Text Index
CREATE FULLTEXT INDEX ON dbo.Article(Notes)
KEY INDEX PK_Article
WITH STOPLIST = SYSTEM;
GO

Catálogo de texto completo y verificación de índice de texto completo

Expanda los nodos relacionados para ver el índice de texto completo y el catálogo de texto completo que acaba de crear:

Ahora está listo para ejecutar consultas de texto completo en la tabla de interés; en nuestro caso, es Artículo .

Término simple

Buscar una palabra o una frase es más fácil que buscar otras formas, por lo que también se conoce como un término simple.

Consulte Implementación de búsqueda de texto completo en SQL Server 2016 para principiantes artículo para implementar una forma básica de una consulta de texto completo para buscar una palabra o una frase.

Ahora analicemos algunas de las posibles búsquedas avanzadas realizadas con la búsqueda de texto completo.

Búsqueda avanzada de texto completo con término de prefijo

Un término de prefijo se refiere a una palabra prefijada que comienza con algunas letras; puede ser cualquier cosa que coincida con ese patrón. Puede considerarlo como una versión de búsqueda de texto completo de LIKE con palabra prefijada*.

Una palabra o palabras dentro de una frase también pueden tener términos de prefijo.

Ejemplo

Por ejemplo, buscando la palabra datos* puede darnos cualquier cosa comenzando con datos en esa columna, como datos, base de datos, bases de datos, etc.

Búsqueda de artículos relacionados con desarrolladores usando un término de prefijo

Imaginemos que tiene la tarea de buscar artículos relacionados con el desarrollo para organizarlos en un grupo de desarrollo separado para una mejor experiencia de visualización del sitio web.

La solución es 'búsqueda de término de prefijo' utilizando una consulta de texto completo de la siguiente manera:

--Implementing Prefix Term Full-Text Seach to find dev related articles
SELECT Title,Notes FROM dbo.Article WHERE CONTAINS(NOTES,'"dev*"')

Los resultados también mostraron el artículo sobre DevOps – no está relacionado con el desarrollo, por eso ejecutamos otro script. Encontrará todos los artículos relacionados con el desarrollo más rápido mediante una consulta de texto completo, excluyendo DevOps de la siguiente manera:

--Implementing Prefix Term Full-Text Seach to find dev related articles but not DevOps
SELECT Title,Notes FROM dbo.Article WHERE CONTAINS(NOTES,'"dev*"') AND NOT CONTAINS(Notes,'DevOps')

La salida es la siguiente:

También tenga en cuenta que es esencial poner la palabra de búsqueda entre comillas dobles como se muestra en las secuencias de comandos anteriores. Al hacer esto, implementamos la búsqueda de términos de prefijo correctamente.

Búsqueda avanzada de texto completo con forma flexiva

A veces es necesario buscar formas flexivas de una palabra que indiquen las posibles formas que puede tomar una palabra.

Ejemplo

Un ejemplo simple es la palabra "Implementar", que puede tener las siguientes formas flexivas:

  1. Implementación
  2. Implementado
  3. Implementación
  4. Implementaciones
  5. Implementación

Formas flexivas de Write Search

Veamos qué sucede si ejecutamos una consulta de texto completo para encontrar notas para todas las formas flexivas de la palabra escribir:

-- Searching inflectional forms of word write using Full-Text Search

SELECT Title,Notes FROM dbo.Article WHERE CONTAINS(NOTES,'FORMSOF(INFLECTIONAL,write)')

La columna Notas con filas que contienen tanto escribir y escribir se muestran donde escribiendo es una forma flexionada de escribir .

Formas flexivas de búsqueda de tecnología

Si tiene la tarea de buscar todos los artículos que contengan diferentes formas de la palabra tecnología, implemente una forma flexiva de la búsqueda de palabras usando el siguiente script T-SQL:

-- Searching inflectional forms of word technology using Full-Text Search
SELECT Title,Notes FROM dbo.Article WHERE CONTAINS(NOTES,'FORMSOF(INFLECTIONAL,technology)')

La salida es la siguiente:

Búsqueda de unidad de término sin prefijo

Ahora construyamos una consulta de texto completo más compleja. Buscará todos los artículos para encontrar una forma flexiva de la palabra prueba pero sin término prefijo unidad (excluyendo pruebas unitarias) ya que estamos buscando artículos sobre pruebas, no sobre pruebas unitarias:

-- Searching inflectional forms of word test excluding unit prefix term using Full-Text Search
SELECT Title,Notes FROM dbo.Article WHERE CONTAINS(NOTES,'FORMSOF(INFLECTIONAL,test)') AND NOT CONTAINS(NOTES,'"unit*"')

Como resultado, vamos a ver solo registros donde manual , automatizado, o simplemente probando se mencionan palabras excluyendo pruebas unitarias artículos.

Búsqueda avanzada de texto completo con búsqueda de proximidad

Usemos nuestra experiencia práctica de usar la búsqueda de proximidad ejecutando una consulta de texto completo.

Búsqueda de proximidad/término

Esta forma de búsqueda de texto completo le permite buscar palabras o frases cercanas entre sí. Es muy útil para encontrar registros cuando algunas palabras o frases se encuentran muy apretadas.

Ejemplo

Un buen ejemplo de una búsqueda de proximidad es buscar registros donde la palabra fútbol está cerca de la palabra suelo para obtener información solo sobre campos de fútbol.

Busque "pruebas cercanas avanzadas" utilizando el término de proximidad

Si desea buscar todos los artículos en los que se mencionan las pruebas avanzadas sin seguir ningún orden en particular, su mejor opción es utilizar la búsqueda de proximidad dado que la búsqueda de texto completo está configurada en la columna deseada.

Escriba el siguiente script para buscar la palabra avanzado cerca de la palabra prueba en cualquier orden en la columna Notas:

-- Search for word advanced near word testing using proximity search (Full-Text Search)
SELECT NOTES FROM dbo.Article WHERE CONTAINS (NOTES,'NEAR(advanced,testing)')

Los resultados son los siguientes:

Los resultados nos mostraron las notas donde se menciona la prueba por métodos de nivel avanzado y esto es lo que estábamos buscando. También podemos especificar la distancia entre dos palabras.

Búsqueda con no más de 2 palabras de diferencia

Finalmente, ejecute una consulta de texto completo usando un término de proximidad para encontrar cada escenario de base de datos donde la palabra base de datos está cerca de la palabra escenario pero no más de 2 palabras de diferencia.

-- Search for word database near word scenario not more than 2 words apart using proximity search (Full-Text Search)
SELECT NOTES FROM dbo.Article WHERE CONTAINS (NOTES,'NEAR((database,scenario),2,TRUE)')

La salida es la siguiente:

Como resultado, el artículo donde escenario de desarrollo de base de datos se menciona se ha mostrado con éxito.

Con esto, ha aprendido con éxito a escribir consultas avanzadas de texto completo en cualquier columna. Esto lo ayuda a cumplir con los requisitos de búsqueda sofisticados para estar listo para ejecutar la búsqueda de texto completo en los escenarios de su vida profesional donde corresponda.

Cosas que hacer

Ahora que puede escribir consultas avanzadas de texto completo, debe probar estas cosas para mejorar sus habilidades:

  1. Trate de buscar todos los artículos donde la palabra prefijada auto se utiliza.
  2. Teniendo en cuenta este artículo, intente escribir un script para realizar una búsqueda de proximidad para encontrar todas las filas donde aparece la palabra moderno está cerca de la palabra herramientas .
  3. Trate de encontrar todas las formas flexivas de la palabra escribió .